これらのコードスニペットの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
クラス オブジェクト (A) が 1 つしかなく、クラス タイプ (a) のオブジェクトのインスタンスが 1 つしかないにもかかわらず、すべてが False を返す理由。
(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) の同じコードは、Python 3.3.1 の 32 ビット バージョンでこの結果を示します。
>>> 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でもなぜ異なるのか、詳細を教えてもらえますか...