我认为这是访谈中最常见的问题:
class A:
def __init__(self, name):
self.name = name
def __del__(self):
print self.name,
aa = [A(str(i)) for i in range(3)]
for a in aa:
del a
Run Code Online (Sandbox Code Playgroud)
那么这段代码的输出是什么呢?输出将是什么,为什么?多数民众赞成因为a是对列表中的对象的引用,然后我们调用del方法我们删除这个引用而不是对象?
引用的对象至少有2个引用a(变量是对象的引用,它们不是对象本身).列表中有一个引用,然后是引用" a".当您del a,a从列表中删除一个引用(变量)但不删除引用.
另请注意,Python不保证__del__会被调用...