为什么__del__没有正常工作

Den*_*nis 2 python class

我认为这是访谈中最常见的问题:

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方法我们删除这个引用而不是对象?

mgi*_*son 5

引用的对象至少有2个引用a(变量是对象的引用,它们不是对象本身).列表中有一个引用,然后是引用" a".当您del a,a从列表中删除一个引用(变量)但不删除引用.

另请注意,Python不保证__del__会被调用...

  • 无论如何,"del a"不是多余的吗?对象`a`标签的引用计数是否会在循环的下一次迭代中递减,无论如何? (2认同)