qq_29808959 2009-09-10 23:19
浏览 470
已采纳

关于python循环引用的问题

最近初学python,发现这个问题让我很头大。不引用吧,很多时候逻辑上又需要。
google了一下,n多帖子只在说循环引用导致内存泄露,也没说个解决方法。哪位大哥能指点一下呢....
[b]问题补充:[/b]
感谢RednaxelaFX的解释.
循环引用的对象如果应该死掉的话,迟早会死的.这个我不太理解.两个对象引用计数都不为0,按网上说的就是释放不掉了.貌似python gc也不象java那样能处理孤岛.
另外我能不能再问下,如果是两个文件相互import会有什么不好的后果呢.
实在感谢~~~

  • 写回答

3条回答 默认 最新

  • rednaxelafx 2009-09-11 14:48
    关注

    Python的标记-清除式GC就是用来清理孤岛的……它不会理会引用计数的多少,但因为它可能带来比较长的停顿时间,所以在Python里只是作为备份使用;它要处理的对象显然都是“应该死掉”但引用计数尚未降为0的对象,因为如果应用技术已经为0,那么那个对象就已经“死”了。事实上很多Java虚拟机里也有用到标记-清除算法。
    “网上说释放不掉”……这里也是“网上”,而我也有忽悠人的可能。楼主请多依靠自己的判断力。 =v=
    如果你想深入点去了解,阅读源码是种有效的手段。《Python源码剖析》一书的16.3讲解了Python对循环引用的垃圾收集,可以配合源码阅读。

    至于模块间循环import,其实只要引用了“另外一边”的代码都只出现在函数或者方法里,就没啥问题;顶层代码在import过程中会被执行,循环import可能会在这里出问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题