我正在使用python 2.7解释器,并且发现了以下有趣的行为。
给出一个空类:
class A():
pass
我可以创建单独的实例,并且像预期的那样,它们具有单独的ID:
a = A()
b = A()
id(a)
>>> XXXXXXXX44
id(b)
>>> XXXXXXXX16
但是当我后来调用id内置函数时,如果没有一个变量来保存正在创建的实例,我会看到返回相同的id。
id(A())
>>> XXXXXXXX88
id(A())
>>> XXXXXXXX88
更奇怪的是,当我在调用id(A())
之间混合变量所持有的另一个实例时,行为会发生变化:
id(A())
>>> XXXXXXXX88
a = A()
>>> XXXXXXXX88
id(A())
>>> XXXXXXXX44
对这种行为的任何直觉?
答案 0 :(得分:4)
id(A())
创建一个A
实例,在id
方法退出后立即进行垃圾回收。
因此,对id(A())
的新调用会重复使用该参考。
如果将第一个引用存储在变量中,Python就无法重用该引用,因为它已被使用。