在这个Python代码中
import gc
gc.disable()
<some code ...>
MyClass()
<more code...>
我希望MyClass
构造函数创建的匿名对象不会被垃圾收集。 MyClass
实际上链接到C ++代码的共享对象库,通过原始内存指针,我能够检查匿名对象的内容。
然后我可以看到对象立即被破坏(垃圾收集)。
如何阻止Python垃圾收集?
我必须匿名保持这个电话。我无法更改代码MyClass()
的部分 - 它必须保持原样。
MyClass()
必须保持原样,因为它是来自C ++的精确翻译(通过SWIG),并且两者应该是相同的,以便翻译的人受益。
我必须通过一些“初始化代码”来防止垃圾收集,这只在程序开始时调用一次。之后我无法触及任何东西。
答案 0 :(得分:3)
gc
中引用的“垃圾收集器”仅用于解析循环引用。在Python中(至少在主要的C实现中,CPython),内存管理的主要方法是引用计数。在您的代码中,MyClass()
的结果没有引用,因此将始终立即处理。没有办法阻止这种情况。
即使你的编辑,有什么不清楚的,为什么你不能简单地将它分配给某些东西?如果目标受众是“翻译的人”,那么这些人可能会阅读,所以写一条评论来解释你为什么要做作业。