考虑以下代码:
def a():
pass
def comp():
for f in (a,):
if f is a:
print("Identity")
elif f == a:
print("Equality")
comp()
我创建一个函数a
和一个函数comp
,用于检查元组(a,)
中的所有函数是否与a
相同({ {1}}或等于(f is a
)。毫不奇怪,此代码显示了“身份”一词。
但是,如果我将这些函数转换为类f == a
的实例方法,情况将不再如此:
Test
令我惊讶的是,它打印的是“平等”而不是“身份”。确实,如果我们将class Test(object):
def a(self):
pass
def comp(self):
for f in (self.a,):
if f is self.a:
print("Identity")
elif f == self.a:
print("Equality")
t = Test()
t.comp()
放在print(id(f), id(self.a))
循环中,它将打印不同的标识值。如我所料,这两个身份与for
不同。
这是为什么?为什么在普通函数没有的情况下,方法似乎被for循环复制了?