在Python中,给定一个类a,为什么对id(a())的后续调用返回相同的值?
我正在使用Python2.7解释器,发现下面的行为非常有趣,值得一提 给定一个空类:在Python中,给定一个类a,为什么对id(a())的后续调用返回相同的值?,python,python-2.7,built-in,Python,Python 2.7,Built In,我正在使用Python2.7解释器,发现下面的行为非常有趣,值得一提 给定一个空类: class A(): pass 我可以创建单独的实例,并且像预期的那样,它们具有单独的ID: a = A() b = A() id(a) >>> XXXXXXXX44 id(b) >>> XXXXXXXX16 但是,当我在没有变量保存正在创建的实例的情况下,对内置id进行后续调用时,我看到返回了相同的id id(A()) >>> XXXXXXXX
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将无法重用该引用,因为它已被使用。在编写本文之后,我开始怀疑实例在未绑定时会立即被垃圾收集,ID也会被重用。不过,如果有人知道的话,我希望你能给我一个彻底的解释。是的,好吧!很好的发现。谢谢你的快速回答。顺便说一句,你自己已经找到了答案。不过我不确定,最好知道