在Python中,给定一个类A,为什么对id(A())的后续调用返回相同的值?

时间:2017-01-12 10:23:57

标签: python python-2.7 built-in

我正在使用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

对这种行为的任何直觉?

1 个答案:

答案 0 :(得分:4)

id(A())创建一个A实例,在id方法退出后立即进行垃圾回收。

因此,对id(A())的新调用会重复使用该参考。

如果将第一个引用存储在变量中,Python就无法重用该引用,因为它已被使用。