为什么python引用中的绑定实例方法不相等?

Ale*_*per 9 python equality sentinel

>>> class foo(object):
...     def test(s):
...         pass
...
>>> a=foo()
>>> a.test is a.test
False
>>> print a.test
<bound method foo.test of <__main__.foo object at 0x1962b90>>
>>> print a.test
<bound method foo.test of <__main__.foo object at 0x1962b90>>
>>> hash(a.test)
28808
>>> hash(a.test)
28808
>>> id(a.test)
27940656
>>> id(a.test)
27940656
>>> b = a.test
>>> b is b
True
Run Code Online (Sandbox Code Playgroud)

Ign*_*ams 7

他们在运行时受到约束; 访问对象上的属性每次重新绑定该方法.当你把它们放在同一条线上时它们不同的原因是第一种方法在第二种方法绑定时尚未释放.

  • 换句话说,`id`似乎每次都是相同的,因为前一个实例在打印结果后立即被gc'd,并且特定版本的CPython中的内存管理恰好可以预测到将下一个对象放在同一个地方. (8认同)