如何在GC上使用圆圈处理python?

时间:2017-07-12 18:02:02

标签: python garbage-collection

我知道python使用引用计数进行垃圾收集。

在堆上分配的每个对象都有计数器,用于计算引用它的对象的数量,当计数器达到零时,对象将被删除。

但python如何处理圆圈指针?

如果其中一个用1个计数器删除第二个停留但需要删除。

1 个答案:

答案 0 :(得分:0)

处理它的方式取决于python实现。参考实现,您可能正在使用的实现,有时称为CPython,因为它是用C语言编写的。

CPython使用引用计数来清理显然不再使用的对象。但是,每隔一段时间,它会暂停程序的执行,并开始直接由变量在程序中引用的对象。然后,它会跟随所有引用,只要它可以,标记已访问的对象。一旦它跟随所有引用,它就会找到所有从主程序无法访问的对象,并删除它们。这称为跟踪垃圾收集,其中标记和扫描是一种特殊的实现。

如果您愿意,并且您确定自己的程序没有循环引用,则可以关闭此功能以提高性能。但是,如果您有循环引用,则会意外地导致内存泄漏,因此除非您真的担心性能,否则通常不值得这样做。