【发布时间】:2015-05-02 20:33:55
【问题描述】:
在我一直从事的项目开发过程中,我遇到了垃圾收集器无法取消分配链表甚至列表的问题。
class B(object):
def __init__(self, previous):
self.previous = previous
def __del__(self):
self.previous = None
self = None
import gc
gc.set_debug(gc.DEBUG_LEAK)
l = []
prev = None
for i in range(1000000):
b = B(prev)
l.append(b)
prev = b
del l[:]
gc.collect()
print gc.garbage
当我在分配前、分配后和删除后检查内存使用情况时。分配后的内存使用量仍与删除后的内存使用量相同。并且垃圾收集器不会抱怨任何内存泄漏。
当我使用 pympler 在 python 环境中跟踪对象时。对象不存在还为它们分配了内存。
但是,只有在链接实例时才会出现此问题。如果一个实例没有相互引用。垃圾收集器行为正常。
知道为什么吗?
【问题讨论】:
-
在上面的代码中,在
del l[:]之后,您的完整列表仍然可以通过b和prev引用访问。
标签: python python-2.7 memory-leaks garbage-collection