Python id(obj)的临时更改

Python id(obj)的临时更改,python,built-in,objectid,Python,Built In,Objectid,这是一个: 所以。。。在下面的示例中,它是如何变化的 >>> class A(object): ... def f(self): ... return True ... >>> a=A() >>> id(a.f) Out[21]: 62105784L >>> id(a.f) Out[22]: 62105784L >>> b=[] >>> b.append(a.f) >&

这是一个:

所以。。。在下面的示例中,它是如何变化的

>>> class A(object):
...   def f(self):
...     return True
... 
>>> a=A()
>>> id(a.f)
Out[21]: 62105784L
>>> id(a.f)
Out[22]: 62105784L
>>> b=[]
>>> b.append(a.f)
>>> id(a.f)
Out[25]: 50048528L

a.f
转换为类似于
f.\uu get\uuu(a,a)
的内容,其中
f
是“原始”函数对象。这样,函数生成一个包装器,并且每次调用都会生成这个包装器

a.f.im_func
引用回原始函数,其
id()
不应更改

但在未来,这个问题的处理更加简洁

>>> class A(object):
...   def f(self):
...     return True
... 
>>> a=A()
>>> id(a.f)
Out[21]: 62105784L
>>> id(a.f)
Out[22]: 62105784L
>>> b=[]
>>> b.append(a.f)
>>> id(a.f)
Out[25]: 50048528L