在 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 不能重复使用该引用,因为它已被使用。
我正在使用 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 不能重复使用该引用,因为它已被使用。