我找到了这个memory leak detection snippet,并且想知道它产生的内存泄漏。
import gc
def dump_garbage():
"""
show us what's the garbage about
"""
# force collection
print("\nGARBAGE:")
gc.collect()
print("\nGARBAGE OBJECTS:")
for x in gc.garbage:
s = str(x)
if len(s) > 80: s = s[:80]
print(type(x),"\n ",s)
if __name__=="__main__":
import gc
gc.enable()
gc.set_debug(gc.DEBUG_LEAK)
# make a leak
l = []
l.append(l)
del l
# show the dirt ;-)
dump_garbage()
为了测试gc内存泄漏检测,作者创建了自己的小内存泄漏:
l = []
l.append(l)
del(l)
为什么会导致泄漏?如我所见,我将拥有一个列表对象,然后是一个嵌套列表对象,其中内部是是外部,然后删除外部。 gc是否不知道要删除对原始列表的所有引用,从而导致内部列表泄漏?