Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python如何在GC上处理circle?_Python_Garbage Collection - Fatal编程技术网

python如何在GC上处理circle?

python如何在GC上处理circle?,python,garbage-collection,Python,Garbage Collection,我知道python使用引用计数进行垃圾收集 在堆上分配的每个对象都有一个计数器,它统计引用它的对象的数量,当计数器为零时,该对象被删除 但是python如何处理圆指针呢 如果其中一个,则删除第二个带有1个计数器的stay,但需要删除。处理此问题的方式取决于python实现。您可能正在使用的参考实现有时称为CPython,因为它是用C编写的 CPython使用引用计数来清理显然不再使用的对象。但是,每隔一段时间,它就会暂停程序的执行,并开始处理程序中活动的变量直接引用的对象。然后,它尽可能地跟踪所

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

在堆上分配的每个对象都有一个计数器,它统计引用它的对象的数量,当计数器为零时,该对象被删除

但是python如何处理圆指针呢


如果其中一个,则删除第二个带有1个计数器的stay,但需要删除。

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

CPython使用引用计数来清理显然不再使用的对象。但是,每隔一段时间,它就会暂停程序的执行,并开始处理程序中活动的变量直接引用的对象。然后,它尽可能地跟踪所有引用,标记访问了哪些对象。一旦它遵循了所有引用,它就会找到所有无法从主程序访问的对象,并将其删除。这称为跟踪垃圾收集,其中标记和扫描是一个特定的实现


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

AFAIK Python有一个附加的可选垃圾收集器(默认情况下是打开的),它会不时检查对象是否是来自“活动集”的引用变量(通过检查调用堆栈)。@WillemVanOnsem我想要更多关于它的细节,调用标记和哭泣?看看这里@Jonas
CPython垃圾收集器的主要思想。。我需要的是关于
python
而不是
cpython
@JONI6543:cpython是python的标准实现。不同的实现有完全不同的垃圾收集方案;Python的GC实际上并不是从已知的可访问对象开始的,因为它的引用管理系统无法识别开始遍历的引用的根集。相反,它必须考虑所有它知道的引用,找出哪些被跟踪的对象有它不知道的引用,然后从这些对象开始遍历。您可以看到实现,以及过时但仍然基本准确的概述。