7

可能重复:
Python:由于您的代码,Python 中是否可能存在实际的内存泄漏?

由于python垃圾收集器处理循环引用的检测(对象A引用对象B和对象B引用对象A),我想知道什么可能导致python代码中的内存泄漏?您能否提供具体的代码示例,这些代码会创建垃圾收集器无法处理的不可访问的内存区域,或者这样的事情是不可能的?

任何例子表示赞赏!

4

1 回答 1

4

您可以使用 gc — 垃圾收集器接口模块,

gc.garbage

收集器发现无法访问但无法释放的对象列表(无法收集的对象)。默认情况下,此列表仅包含具有__del__()方法的对象。[1] 具有__del__()方法并且是引用循环一部分的对象会导致整个引用循环无法收集,包括不一定在循环中但只能从循环中访问的对象。Python 不会自动收集此类循环,因为通常 Python 无法猜测运行循环的安全顺序 __del__()方法。如果您知道安全顺序,则可以通过检查垃圾列表来强制执行该问题,并由于列表中的对象而显式中断循环。请注意,由于位于垃圾列表中,这些对象仍然保持活动状态,因此它们也应该从垃圾中删除。例如,在中断循环后,del gc.garbage[:]清空列表。通常最好通过不创建包含带有__del__(). 方法,并且在这种情况下可以检查垃圾以验证没有创建这样的循环。

于 2012-11-17T22:52:50.523 回答