id函数的Python文档指出:
返回对象的“身份”。这是一个整数(或长整数),在此对象的生存期内,此整数保证是唯一且恒定的。
(强调我的)
当您这样做时id(Hello.hello) == id(Hello.hello)
,方法对象只是短暂地创建,并且在首次调用“ id”之后被视为“无效”。由于调用id
,您只需要Hello.hello
在短时间内存活- 足以获取ID。一旦获得该ID,该对象将失效,第二个对象Hello.hello
可以重用该地址,这使其看起来好像两个对象具有相同的ID。
Hello.hello is Hello.hello
与之形成对比的是,两个实例的生存期必须足够长才能相互比较,因此最终您将拥有两个实时实例。
如果您改为尝试:
>>> a = Hello.hello
>>> b = Hello.hello
>>> id(a) == id(b)
False
…您将获得的期望值False
。