我正在阅读有关Python(3.4)中的类,并从我的理解看来,每个新对象都有自己的绑定方法实例。Python是否真的为每个新实例创建所有绑定方法?
class A:
def __init__(self, name):
self.name = name
def foo(self):
print(self.name)
a = A('One')
b = A('Two')
print(a.foo == b.foo)
这个的输出是False
。
这在我看来是浪费了记忆。我认为内部a.foo
和b.foo
会以某种方式内部指向内存中的一个函数:A.foo
其中self
作为类实例将被传递。
我认为这可能无法在语言中轻松实现。
每个新实例是否也包含绑定方法的新实例?
如果是这样,那么这不会伤害到性能,或者比其他语言中的方法在诸如Java
之类的对象“共享”时更谨慎地创建新对象?
你能链接到你读过的东西吗? –
@SotiriosDelimanolis'X().f == X.f'将导致'False'(其中f是instace方法)。这足以让人想那样。 –
尽管每个绑定的方法引用了相同的底层函数。包装的内存开销很小。 – chepner