我试图了解 Python 垃圾收集器是如何工作的,以及我是否可以做任何事情来控制何时收集对象。我写了这个测试:
>>> class Test:
... def __del__(self):
... print 'Delete ' + str(self)
...
>>> def fun():
... return Test()
...
>>> fun()
<__main__.Test instance at 0x0000000002989E48>
>>> fun()
Delete <__main__.Test instance at 0x0000000002989E48>
<__main__.Test instance at 0x00000000023E2488>
>>> fun()
Delete <__main__.Test instance at 0x00000000023E2488>
<__main__.Test instance at 0x0000000002989C48>
正如你所看到的Test
,虽然我没有为它保留一个实例,但直到我下次调用时才会删除该实例fun
。这仅仅是一个意外(它可能已在其他任何时候被删除)还是有一个特定的原因为什么它只有在我fun
再次调用时才被删除?如果我不保留对它的引用,我能做些什么来确保它被删除?