引用计数

本节中的宏用于管理Python对象的引用计数

void Py_INCREF PyObject  *o
增加对象o的引用计数。对象不能是NULL;如果你不确定它不是NULL,请使用Py_XINCREF().
void Py_XINCREF PyObject  *o
增加对象o的引用计数。对象可能是NULL,在这种情况下宏没有效果.
void Py_DECREF PyObject  *o
减少对象o的引用计数。对象不能是NULL;如果你不确定它不是NULL,请使用Py_XDECREF()。如果referencecount达到零,则调用对象的类型的释放函数(不能是NULL).

Warning

释放函数可以调用任意Python代码(例如,当一个类实例带有__del__()方法被解除分配)。虽然这些代码中的异常不会传播,但执行的代码可以自由访问所有Python全局变量。这意味着在Py_DECREF()之前,任何可以从全局变量到达的对象都应该处于一致状态。例如,从列表中删除对象的代码应该将参数复制到临时变量中的已删除对象,更新列表数据结构,然后调用Py_DECREF()作为临时变量.

void Py_XDECREF PyObject  *o
减少对象o的引用计数。对象可能是NULL,在这种情况下宏没有效果;否则效果与Py_DECREF()相同,同样的警告适用.
void Py_CLEAR PyObject  *o
减少对象o的引用计数。对象可能是NULL,在这种情况下宏没有效果;否则效果与Py_DECREF()相同,但参数也设置为NULLPy_DECREF()不适用于传递的对象,因为宏小心地使用临时变量并在减少其引用计数之前将参数设置为NULL.

每当减少垃圾收集过程中可能遍历的可变值时,最好使用此宏.

以下函数用于Python的运行时动态嵌入:Py_IncRef(PyObject *o), Py_DecRef(PyObject *o)。它们分别是Py_XINCREF()Py_XDECREF()的简单导出功能版本.

以下函数或宏仅用于解释器核心:_Py_Dealloc(), _Py_ForgetReference(), _Py_NewReference(),以及全局变量_Py_RefTotal.

评论被关闭。