当我在Python脚本中执行gc.collect()
时,它会返回类似86,14等的值。
我知道这个调用执行垃圾收集,我已经阅读了文档here。但有人可以通过一个例子解释数字实际上意味着什么?
答案 0 :(得分:10)
因为你因为不读自己而被责备;-),它会返回“无法访问的对象的数量”。但是文档并不是非常详细,以确切地知道意味着什么。
它实际上是两个数字的总和:被识别为垃圾并实际释放的对象数量,以及被识别为垃圾但无法释放的对象数量。对于后者的示例,在Python 3.4之前无法自动释放直接涉及包含至少一个具有__del__
方法的对象的无法到达(“垃圾”)引用循环的对象。
这是Python 3.6.5下的一个例子:
>>> gc.collect() # no trash to begin with
0
>>> a = []
>>> a.append(a) # create an object that references itself
>>> gc.collect() # but it's not trash because name "a" is bound to it
0
>>> a = None # break the binding; _now_ it's trash
# but refcounting alone can't discover that it's trash
>>> gc.collect() # .collect() finds this cyclic trash
1 # and reports that one trash object was collected
一般来说,这个返回值很少使用。