On this page
Reference Counting
本节中的宏用于 ManagementPython 对象的引用计数。
无效
Py_INCREF
(PyObject ** o *)- 增加对象* o *的引用计数。该对象不能为
NULL
;如果您不确定它不是NULL
,请使用Py_XINCREF()。
- 增加对象* o *的引用计数。该对象不能为
无效
Py_XINCREF
(PyObject ** o *)- 增加对象* o *的引用计数。该对象可能是
NULL
,在这种情况下,宏无效。
- 增加对象* o *的引用计数。该对象可能是
无效
Py_DECREF
(PyObject ** o *)- 减少对象* o *的引用计数。该对象不能为
NULL
;如果您不确定它不是NULL
,请使用Py_XDECREF()。如果引用计数达到零,则调用对象类型的释放函数(不得为NULL
)。
- 减少对象* o *的引用计数。该对象不能为
Warning
释放Function可以导致调用任意 Python 代码(例如,使用del()方法的类实例被释放时)。虽然此类代码中的异常不会传播,但是执行的代码可以自由访问所有 Python 全局变量。这意味着在调用Py_DECREF()之前,从全局变量可访问的任何对象应处于一致状态。例如,从列表中删除对象的代码应将对引用的引用复制到一个临时变量中,删除该对象,更新列表数据结构,然后为临时变量调用Py_DECREF()。
无效
Py_XDECREF
(PyObject ** o *)- 减少对象* o *的引用计数。对象可能是
NULL
,在这种情况下,宏无效。否则,效果与Py_DECREF()相同,并且适用相同的警告。
- 减少对象* o *的引用计数。对象可能是
无效
Py_CLEAR
(PyObject ** o *)- 减少对象* o *的引用计数。该对象可以是
NULL
,在这种情况下宏无效。否则,效果与Py_DECREF()相同,除了参数也设置为NULL
。对于Py_DECREF()的警告不适用于所传递的对象,因为宏在减小其引用计数之前会谨慎使用临时变量并将参数设置为NULL
。
- 减少对象* o *的引用计数。该对象可以是
每当减少垃圾回收期间可能遍历的对象的引用计数时,最好使用此宏。
以下函数用于 Python 的运行时动态嵌入:Py_IncRef(PyObject *o)
,Py_DecRef(PyObject *o)
。它们只是分别导出的函数版本Py_XINCREF()和Py_XDECREF()。
以下函数或宏仅在解释器内核内使用:_Py_Dealloc()
,_Py_ForgetReference()
,_Py_NewReference()
以及全局变量_Py_RefTotal
。