如何防止匿名对象的Python垃圾收集?

时间:2013-11-17 20:14:45

标签: python garbage-collection

在这个Python代码中

import gc
gc.disable()
<some code ...>
MyClass()
<more code...>

我希望MyClass构造函数创建的匿名对象不会被垃圾收集。 MyClass实际上链接到C ++代码的共享对象库,通过原始内存指针,我能够检查匿名对象的内容。

然后我可以看到对象立即被破坏(垃圾收集)。

如何阻止Python垃圾收集?

我必须匿名保持这个电话。我无法更改代码MyClass()的部分 - 它必须保持原样。

MyClass()必须保持原样,因为它是来自C ++的精确翻译(通过SWIG),并且两者应该是相同的,以便翻译的人受益。

我必须通过一些“初始化代码”来防止垃圾收集,这只在程序开始时调用一次。之后我无法触及任何东西。

1 个答案:

答案 0 :(得分:3)

gc中引用的“垃圾收集器”仅用于解析循环引用。在Python中(至少在主要的C实现中,CPython),内存管理的主要方法是引用计数。在您的代码中,MyClass()的结果没有引用,因此将始终立即处理。没有办法阻止这种情况。

即使你的编辑,有什么不清楚的,为什么你不能简单地将它分配给某些东西?如果目标受众是“翻译的人”,那么这些人可能会阅读,所以写一条评论来解释你为什么要做作业。