分配给看起来像元组的东西时创建的变量的生命周期

时间:2012-09-08 10:40:44

标签: python variables tuples

有这段代码:

>>> (a, b) = (2, 3)
>>> a
2
>>> b
3

为什么元组创建后变量 a b 仍然存在?我的意思是:

(a, b) = (2, 3)

创建了一些元组,并且此元组未分配给任何变量,因此垃圾收集器应该在此行之后立即销毁此元组。

变量 a b 仅是此元组的引用 - 因此,如果此元组(a,b)被销毁,则变量 a b 也应仅销毁。

那么为什么在定义元组之后这些变量仍然存在?

2 个答案:

答案 0 :(得分:4)

(a, b) = (2, 3)

不创建元组,而是指定两个变量ab

相当于:

a,b = 2,3

并同时设置a=2b=3“。这很有用,例如切换变量时:

a,b = b,a

将设置a=3b=2(并且如果按顺序执行则需要临时变量)。

答案 1 :(得分:3)

解析器没有看到(a, b)作为元组,尽管它确实为你进行了元组解包。因此,没有创造元组,更不用说毁灭了。相反,python将其视为两个独立的变量ab

如果你要反汇编语句的编译字节码,你可以看到这个:

>>> 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),然后将其存储到局部变量ab中。