假设我有一个二叉树,它包含指向父节点和子节点的每个节点的指针,我想删除内部子树的某些部分,以合理的方式将树的其余部分修补在一起。
即使子树中的节点相互引用,Python 是否知道垃圾回收子树的丢弃部分?我希望这是所有使用垃圾收集的语言的能力,但我对垃圾收集的了解还不足以确定。我自己做过的最好的事情是智能 (C++) 指针系统,它不够智能,无法处理我上面描述的情况。
最佳答案
是的,Python 会丢弃树中未引用的节点。
CPython 使用引用计数 来完成大部分垃圾收集工作。在您的情况下,一个或多个树节点将没有任何引用,因此它们将被释放。那么被释放的节点指向的节点可能没有引用,这些节点也将被释放。递归地,所有未引用的节点将被释放。
CPython 还有一个垃圾收集器,可以收集未引用的循环。使用引用计数无法(轻松)检测到这些,但循环收集器可以识别并释放它们。
IronPython 或 Jython 等 Python 的其他实现使用不同的垃圾收集器方案。
关于内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797308/