Reference Counting¶
本节中的宏用于管理Python对象的引用计数。
- void
Py_INCREF
(PyObject *o)¶ 增加对象o的引用计数。对象不能为NULL;如果您不确定它不是NULL,请使用
Py_XINCREF()
。
- void
Py_DECREF
(PyObject *o)¶ 减少对象o的引用计数。对象不能为NULL;如果不确定它不是NULL,请使用
Py_XDECREF()
。如果引用计数达到零,则调用对象的类型的取消分配函数(不能为NULL)。警告
释放功能可以使任意的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()
相同,除了参数也设置为NULL。对于传递的对象,Py_DECREF()
的警告不适用,因为宏小心使用临时变量,并在减小其引用计数之前将参数设置为NULL。每当递减在垃圾容器期间可能被遍历的变量的值时,使用该宏是个好主意。
以下函数用于Python的运行时动态嵌入:Py_IncRef(PyObject * o)
,Py_DecRef t4> * o)
。它们分别是Py_XINCREF()
和Py_XDECREF()
的导出函数版本。
以下函数或宏仅在解释器核心内使用:_Py_Dealloc()
,_Py_ForgetReference()
,_Py_NewReference()
作为全局变量_Py_RefTotal
。