对于这些代码片段的python解释器中正在发生的事情,我有点困惑......我使用的是python 2.7.3的32位版本
class A:
def func(self):
print 'in func'
>>> A.func
>>> <unbound method A.f>
>>> A.__dict__['func']
>>> <function func at 0x013DF9B0>
>>> a = A()
>>> a.func
>>> <bound method A.func of <__main__.A instance at 0x014076C0>>
到这里一切都好......但我对以下代码片段的结果感到困惑......在python 2.7.3中
(1)
>>> A.__dict__['func'] is A.func
>>> False
>>> A.func is A.func
>>> False
>>> a.func is A.func
>>> False
>>> a.func is a.func
>>> False
为什么一切都返回 False,即使只有一个类对象 (A) 和类类型对象 (a) 的单个实例。
(2)
>>> id(A.func)
>>> 20953208
>>> id(A.func)
>>> 20954728
>>> id(A.func)
>>> 20960080
(3)
>>> id(a.func)
>>> 20954288
>>> id(a.func)
>>> 20952888
>>> id(a.func)
>>> 20954728
对于(2)和(3)为什么它一次又一次地改变id......这个函数没有存储在指定的内存位置。
但是块 (1) 的相同代码在 32 位版本的 python 3.3.1 中给出了这个结果
>>> A.__dict__['func'] is A.func
>>> True
>>> A.func is A.func
>>> False
>>> a.func is A.func
>>> False
>>> a.func is a.func
>>> False
谁能告诉我详细信息,不同版本的python这些结果如何不同,以及为什么它在相同版本的python中也不同......