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__
,所有投注将关闭。