当前位置: 首页 > 面试题库 >

我应该担心Python中的循环引用吗?

谢锦程
2023-03-14
问题内容

假设我有维护父/子结构的代码。在这样的结构中,我得到了循环引用,其中子级指向父级,父级指向子级。我应该为他们担心吗?我正在使用Python 2.5。

我担心它们将不会被垃圾回收,并且应用程序最终将消耗所有内存。


问题答案:

“担心”放错了地方,但是,如果您的程序运行缓慢,消耗的内存超出预期,或者出现奇怪的莫名其妙的暂停,则原因很可能是在那些垃圾引用循环中-
它们需要由程序集进行垃圾收集。与“正常”(非循环)参考图不同的过程,并且如果您在这样的循环中捆绑了很多对象,则该收集是偶然的,并且可能会很慢(如果循环中的某个对象包含一个循环垃圾,那么也会禁止循环垃圾收集__del__特殊方法)。

因此,引用循环不会影响程序的正确性,但可能会影响其性能和/或占用空间。

如果并且当您想删除不必要的引用循环时,通常可以使用Python标准库中的weakref模块。

如果并且当您想对循环垃圾收集施加更直接的控制(或执行调试,看看到底发生了什么)时,请使用Python标准库中的gc模块。



 类似资料:
  • 问题内容: 每个命令或Dockerfile中的每个命令都会创建一个容器。如果容器不再运行,则仍可以通过看到它。 我应该担心拥有大量未运行的容器吗?我应该在非运行容器上发行吗? 我不确定这些非运行中的容器会导致哪些性能或内存/存储损失。 问题答案: 未运行的容器除磁盘空间外不占用任何系统资源。 通常,最好自己清理一下,但是如果有很多人坐在那里,那根本就不会降低性能。 如果在运行带有大量已停止容器的D

  • 假设我们正在使用这个类: 现在我们有了一个学生名单,我们被问到了一些问题,比如: 筛选姓名为“Jonh”的人并得到平均年龄 过滤那些名字是“玛丽”的人并获得最大的高度 过滤那些名字是“ben”的人,得到最小的权重 我认为一个干净易懂的解决方案是使用lambdas按名称过滤并得到所要求的内容: 我想它至少要在列表上迭代3次,使用带有条件的单个循环可能更有效: 我认为第一种方法更干净,但第二种更快。我

  • 问题内容: 给定一个以复杂的,循环的方式相互引用的类实例的集合:垃圾收集器是否可能无法释放这些对象? 我隐约记得过去这是JVM中的问题,但我 认为 这在几年前已解决。但是,在jhat中进行的一些调查显示,循环引用是我现在面临的内存泄漏的原因。 注意:我一直给人以JVM能够解析循环引用并从内存中释放这种“垃圾岛”的印象。 但是,我提出这个问题只是为了看看是否有人发现了任何异常。 问题答案: 循环引用

  • 本文向大家介绍C++中的循环引用,包括了C++中的循环引用的使用技巧和注意事项,需要的朋友参考一下 虽然C++11引入了智能指针的,但是开发人员在与内存的斗争问题上并没有解放,如果我门实用不当仍然有内存泄漏问题,其中智能指针的循环引用缺陷是最大的问题。 我们可以看到在出main函数作用域之前两个指针指向的内存并没有释放(指针指向的对象没有调用析构函数),我门把当前的引用数打印出来为2这个没有问题,

  • 问题内容: 如何在如下所示的循环中访问索引? 我想得到以下输出: 当我使用循环遍历它时,如何访问循环索引(在这种情况下为到)? 问题答案: 使用其他状态变量,例如索引变量(通常在或等语言中使用),被认为是非的。 更好的选择是使用 中都提供的内置函数:

  • 问题内容: 有人可以解释吗? 什么是 […]? 问题答案: 只是Python告诉您您有一个循环引用。它足够聪明,不会进入尝试打印出来的无限循环。