1
20
python 3(更新为原始答案): 在python 3中,问题中引用的建议已经从python文档中删除。我的原始答案(如下)仅适用于在文档中包含引号的Python版本。 Python 2: python垃圾收集器最终会找到并删除循环引用,比如从堆栈帧内部引用一个回溯堆栈创建的循环引用,所以不要返回并重写代码。但是,向前看,你可以听从 http://docs.python.org/library/sys.html
(在IT文档中
当你需要抓住例外的时候。 还有两个想法:
首先,你为什么要跑步
如果你想抓住一个例外,你不应该说:
而不是和里面的东西混在一起
第二:好吧,我已经提了很多建议,但还没有真正回答你的问题。-) 为什么要创建循环?在简单的情况下,当一个对象引用它自己时,就会创建一个循环:
或者当两个对象相互引用时:
在这两种情况下,当函数结束时,变量值仍然存在,因为它们被锁定在引用计数范围内:在另一个值先离开之前,两者都不能离开!只有现代的python垃圾收集器才能解决这个问题,因为它最终会注意到循环并将其破坏。
因此理解这种情况的关键是“回溯”对象第三件事(在索引2处)返回
所以当你说
|
2
11
回溯包含对所有活动帧的引用,而这些活动帧又包含对这些不同帧中所有局部变量的引用——这些引用是回溯和帧对象工作的重要组成部分,因此这并不令人惊讶。因此,如果将引用添加回溯源(或在临时添加后未能及时删除它),则不可避免地会形成一个大的引用循环--这会干扰垃圾收集(如果循环中的任何对象属于覆盖
尤其是在长时间运行的程序中,干扰垃圾收集不是最好的主意,因为您将保留不真正需要的内存(时间比需要的时间长,或者如果通过让这些循环包含带有终结器的对象而基本上阻止了垃圾收集,则可以无限期地保留)。
所以,最好尽快消除回溯,不管它们是否来自
|
July · 如何定义数字间隔,然后四舍五入 1 年前 |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |