Python 为什么id()为成员函数返回相同的值?

Python 为什么id()为成员函数返回相同的值?,python,Python,以下python程序中的所有id()都打印相同的值。我认为不同的成员函数是不同的对象,因此id()应该返回不同的值。为什么id()返回相同的值 class A(): def x(self): print 'x' def __y(self): print 'y' def y(self): self.__y() class B(A): def x(self): self.

以下python程序中的所有
id()
都打印相同的值。我认为不同的成员函数是不同的对象,因此
id()
应该返回不同的值。为什么
id()
返回相同的值

class A():
    def x(self):
            print 'x'
    def __y(self):
            print 'y'
    def y(self):
            self.__y()

class B(A):
    def x(self):
            self.jj = 20
            print 'bx'
    def __y(self):
            self.sj = 20
            print 'by'
            print 'by'

ta = A()
tb = B()

ta.x()
ta.y()
ta._A__y()

tb.x()
tb._A__y()
tb._B__y()
tb.y()

print id(ta.x)
print id(ta.y)
print id(ta._A__y)
print id(tb.x)
print id(tb._A__y)
print id(tb._B__y)
print id(tb.y)

下一个问题(实际上这是我最初的问题)是,如何检查tb.\u A\u y和tb.y是否真的调用了相同的函数。我虽然使用id()会告诉我如果id()返回函数的地址,那么答案是什么。但现在我知道它在Python中不是这样工作的

从文档中可以看出:当我写“tb.\u A\u y”和“tb.\u B\u y”时,仍然不清楚创建了哪些对象。为什么他们的生活不重叠?助教和结核病不是一直持续到项目结束吗?如果tb仍处于活动状态,则其成员函数也处于活动状态。所以问题是为什么他们的生活没有重叠?有人知道与id()相关的python源代码吗?我正在看一看。谢谢你的提示。每次访问方法时都会创建一个新的方法对象。Python并没有保留它们。当您通过“classinstance.method”引用绑定类方法时,请参见@yeeha。Python创建了一个新对象。在此调用之后,它将丢弃它。因此,可以重用内存中相同的空间(并且您可以获得相同的“id”)