cpython如何帮助检测对象周期(引用计数)?

cpython如何帮助检测对象周期(引用计数)?,python,garbage-collection,reference-counting,cpython,proof,Python,Garbage Collection,Reference Counting,Cpython,Proof,从我读到的关于cpython的内容来看,它似乎做了引用计数+一些额外的东西来检测/释放指向彼此的对象(如果我错了,请纠正我)。有人能解释一下吗?这是否也能保证*无循环泄漏?如果没有,是否有任何对算法的研究被证明可以增加引用计数,从而使其永不泄漏*?这是否只是每隔一段时间运行一次非引用计数跟踪gc *排除使用外部功能接口的模块的错误和问题如文档中所述,不保证不会发生泄漏;具体地说,默认情况下不收集具有\uuuu del\uu方法的循环对象。对于此类对象,必须手动断开循环链接以启用进一步的GC 根据

从我读到的关于cpython的内容来看,它似乎做了引用计数+一些额外的东西来检测/释放指向彼此的对象(如果我错了,请纠正我)。有人能解释一下吗?这是否也能保证*无循环泄漏?如果没有,是否有任何对算法的研究被证明可以增加引用计数,从而使其永不泄漏*?这是否只是每隔一段时间运行一次非引用计数跟踪gc


*排除使用外部功能接口的模块的错误和问题

如文档中所述,不保证不会发生泄漏;具体地说,默认情况下不收集具有
\uuuu del\uu
方法的循环对象。对于此类对象,必须手动断开循环链接以启用进一步的GC

根据我浏览的理解,解释器将所有对象的引用保持在其控制之下。“额外”垃圾收集器在堆中运行一个类似于标记和扫描的算法,记住每个对象是否可以从“外部”访问,如果不能,则删除它。(GC是,但可以使用
generation
参数从
GC
模块显式运行。)

我所能想到的满足您的标准的唯一有效算法实际上是一个“完整”的GC算法,用于增加引用计数,这似乎是在Python中实现的。不过,我不是这方面的专家