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

In Python, given a class A, why do subsequent calls to id(A()) return the same value?

我正在使用 python 2.7 解释器,发现以下行为很有趣,值得询问。

给定一个空 class:

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

对这种行为有什么直觉吗?

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

因此对 id(A()) 的新调用会重新使用引用。

如果您将第一个引用存储在变量中,Python 不能重复使用该引用,因为它已被使用。