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