2015-04-04 97 views
1

我正在使用Cython封装Python的c库。
我有指向我的C代码中的可调用Python对象的指针,以便稍后从C代码中调用它们。
如果我只有地址,如何确保回收没有垃圾收集或删除。测试python对象是否有效

回答

4

只是__Pyx_INCREF(obj)你持有的物体 - 这确保它不会消失! 记得__Pyx_DECREF(obj)一旦你完成它 - ,并参见https://github.com/cython/cython/wiki/refcounting的细节!)

+0

我知道如何防止gc收集。我通常把它放在列表或字典中(在Python或cython方面),问题是如何测试给定地址的有效性。 – 2015-04-04 05:10:04

+0

@AlexV。,答案是,**没有**的方式。如果您选择不保留该对象,它可能已被释放,因此该地址处的内存现在可能是垃圾(无法确保它是**垃圾)或其他完全不相关的对象的一部分。如果你在乎,**坚持**到对象 - 内存是可替代的,除了一个地址没有,也永远不会!,一种确定的方式“这是一个PyObj的地址,有人为我保持活力,因为我不能被打扰“! - ) – 2015-04-04 05:27:59