内存管理

标签 python garbage-collection binary-tree

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

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

最佳答案

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

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

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

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

关于内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9797308/

相关文章:

c++ - 随机二叉树中的插入函数

python - 如果列值具有字符串,则根据条件对数据框进行子集

python - 如何在python中映射具有多个参数的函数

python - Tensorflow:可变序列长度和批量大小

haskell - GHC 垃圾收集器(在移动设备上)的效率如何?

c - 在 C 中实现最小堆 - 使用数组?

algorithm - 按顺序插入元素时保持二叉树平衡

python - 使用 DBI 模块将 Perl 代码转换为带有 MySQLdb 的 Python

java - JVM 垃圾收集应用程序停止时间差异

java - 次要垃圾回收后 JVM 元空间被填满