Python内存管理

Python内存管理,python,garbage-collection,binary-tree,Python,Garbage Collection,Binary Tree,假设我有一个二叉树,在每个节点上都包含指向父节点和子节点的指针,我想删除内部子树的某些部分,以合理的方式将树的其余部分重新拼接在一起 Python是否知道垃圾收集被丢弃的子树片段,即使其中的节点相互引用?我希望这是所有使用垃圾收集的语言的一种功能,但我对垃圾收集的了解还不够确定。我自己做得最好的是一个智能(C++)指针系统,它不够智能,无法处理我上面描述的情况。是的,Python将丢弃树中未引用的节点 CPython使用引用计数来完成大部分is垃圾收集。在您的情况下,一个或多个树节点将没有剩余的

假设我有一个二叉树,在每个节点上都包含指向父节点和子节点的指针,我想删除内部子树的某些部分,以合理的方式将树的其余部分重新拼接在一起


Python是否知道垃圾收集被丢弃的子树片段,即使其中的节点相互引用?我希望这是所有使用垃圾收集的语言的一种功能,但我对垃圾收集的了解还不够确定。我自己做得最好的是一个智能(C++)指针系统,它不够智能,无法处理我上面描述的情况。

是的,Python将丢弃树中未引用的节点

CPython使用引用计数来完成大部分is垃圾收集。在您的情况下,一个或多个树节点将没有剩余的引用,因此它们将被释放。然后,被释放节点指向的节点可能没有引用,这些节点也将被释放。递归地,将释放所有未引用的节点

CPython还有一个垃圾收集器,可以收集未引用的循环。使用引用计数无法(轻松)检测到这些,但循环采集器可以识别并释放它们


其他Python实现,如IronPython或Jython,使用不同的垃圾收集器方案。

Python(不仅仅是cpython)是否也检测未引用的循环?我要删除的不仅仅是一个节点,而是一个潜在的大型子树,它包含许多构造周期。是的,我在回答中提到过。我明白了。我通常不会将默认的Python称为“CPython”。我的错误。啊,对不起,我有时忘记了它实际上并不是这么叫的(除非在讨论多个实现的上下文中,为了区分语言和实现)。