有这段代码:
>>> (a, b) = (2, 3)
>>> a
2
>>> b
3
为什么元组创建后变量 a 和 b 仍然存在?我的意思是:
(a, b) = (2, 3)
创建了一些元组,并且此元组未分配给任何变量,因此垃圾收集器应该在此行之后立即销毁此元组。
变量 a 和 b 仅是此元组的引用 - 因此,如果此元组(a,b)被销毁,则变量 a 和 b 也应仅销毁。
那么为什么在定义元组之后这些变量仍然存在?
答案 0 :(得分:4)
(a, b) = (2, 3)
不创建元组,而是指定两个变量a
和b
。
相当于:
a,b = 2,3
并同时设置a=2
和b=3
“。这很有用,例如切换变量时:
a,b = b,a
将设置a=3
和b=2
(并且如果按顺序执行则需要临时变量)。
答案 1 :(得分:3)
解析器没有看到(a, b)
作为元组,尽管它确实为你进行了元组解包。因此,没有创造元组,更不用说毁灭了。相反,python将其视为两个独立的变量a
和b
。
如果你要反汇编语句的编译字节码,你可以看到这个:
>>> import dis
>>> def foo():
... (a, b) = (2, 3)
...
>>> dis.dis(foo)
2 0 LOAD_CONST 3 ((2, 3))
3 UNPACK_SEQUENCE 2
6 STORE_FAST 0 (a)
9 STORE_FAST 1 (b)
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
解压缩常量(2, 3)
,然后将其存储到局部变量a
和b
中。