Python中的x,y = self.mytuple这样的操作是原子的吗?

还是可以在分配期间由另一个线程修改self.mytuple,从而导致x引用self.mytuple的第一个版本,而y引用第二个版本?

我正在使用Python 3。

最佳答案

仅当Python代码未处理项目访问时,它才是线程安全的。

解包由一个字节码处理:

>>> def f():
...     a, b = self.mytuple
...
>>> import dis
>>> dis.dis(f)
  2           0 LOAD_GLOBAL              0 (self)
              3 LOAD_ATTR                1 (mytuple)
              6 UNPACK_SEQUENCE          2
              9 STORE_FAST               0 (a)
             12 STORE_FAST               1 (b)
             15 LOAD_CONST               0 (None)
             18 RETURN_VALUE

提供的self.mytuple实际上是标准的Python tuple,它是线程安全的。

一旦从mytuple访问项目触发了自定义__getitem__,所有投注将关闭。

10-05 17:46