我正在阅读文档,看到了以下短语,有些疑惑:
“由于收集器补充了 Python 中已经使用的引用计数,如果您确信程序不会创建引用循环,可以禁用收集器。”
这是什么意思?如果我禁用垃圾回收器(`gc.disable()`),然后执行以下操作:
“由于收集器补充了 Python 中已经使用的引用计数,如果您确信程序不会创建引用循环,可以禁用收集器。”
这是什么意思?如果我禁用垃圾回收器(`gc.disable()`),然后执行以下操作:
a = 'hi'
a = 'hello'
'hi'
会保留在内存中吗?我需要手动释放内存吗?
从这句话中我理解到,gc是专门用来捕获引用循环的额外工具,如果禁用它,则仍然使用对象的引用计数器自动清理内存,但不会管理引用循环。是这样吗?
'hi'
确实会保留在内存中,但试图释放它是错误的。作为字符串字面值,它将被汇编并存储为常量(在代码对象中)。但这可能不是你的问题。我建议你选择一个更无辜的例子(也许涉及列表),以转移注意力。 - user395760a
引用的是更复杂的东西,而不是一个简单的字符串文字,那么那个“东西”会保留在内存中吗?我不能做些什么来释放内存空间吗? - zer0unoa = [1]; a = something else
的示例中变得不可达并被释放。 - user395760