2007-08-15 11:28:01 -03:00
|
|
|
.. highlightlang:: c
|
|
|
|
|
|
|
|
|
|
|
|
.. _countingrefs:
|
|
|
|
|
|
|
|
******************
|
|
|
|
Reference Counting
|
|
|
|
******************
|
|
|
|
|
|
|
|
The macros in this section are used for managing reference counts of Python
|
|
|
|
objects.
|
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: void Py_INCREF(PyObject *o)
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
Increment the reference count for object *o*. The object must not be *NULL*; if
|
2012-01-14 11:42:02 -04:00
|
|
|
you aren't sure that it isn't *NULL*, use :c:func:`Py_XINCREF`.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: void Py_XINCREF(PyObject *o)
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
Increment the reference count for object *o*. The object may be *NULL*, in
|
|
|
|
which case the macro has no effect.
|
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: void Py_DECREF(PyObject *o)
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
Decrement the reference count for object *o*. The object must not be *NULL*; if
|
2012-01-14 11:42:02 -04:00
|
|
|
you aren't sure that it isn't *NULL*, use :c:func:`Py_XDECREF`. If the reference
|
2007-08-15 11:28:01 -03:00
|
|
|
count reaches zero, the object's type's deallocation function (which must not be
|
|
|
|
*NULL*) is invoked.
|
|
|
|
|
|
|
|
.. warning::
|
|
|
|
|
|
|
|
The deallocation function can cause arbitrary Python code to be invoked (e.g.
|
|
|
|
when a class instance with a :meth:`__del__` method is deallocated). While
|
|
|
|
exceptions in such code are not propagated, the executed code has free access to
|
|
|
|
all Python global variables. This means that any object that is reachable from
|
2012-01-14 11:42:02 -04:00
|
|
|
a global variable should be in a consistent state before :c:func:`Py_DECREF` is
|
2007-08-15 11:28:01 -03:00
|
|
|
invoked. For example, code to delete an object from a list should copy a
|
|
|
|
reference to the deleted object in a temporary variable, update the list data
|
2012-01-14 11:42:02 -04:00
|
|
|
structure, and then call :c:func:`Py_DECREF` for the temporary variable.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: void Py_XDECREF(PyObject *o)
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
Decrement the reference count for object *o*. The object may be *NULL*, in
|
|
|
|
which case the macro has no effect; otherwise the effect is the same as for
|
2012-01-14 11:42:02 -04:00
|
|
|
:c:func:`Py_DECREF`, and the same warning applies.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: void Py_CLEAR(PyObject *o)
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
Decrement the reference count for object *o*. The object may be *NULL*, in
|
|
|
|
which case the macro has no effect; otherwise the effect is the same as for
|
2012-01-14 11:42:02 -04:00
|
|
|
:c:func:`Py_DECREF`, except that the argument is also set to *NULL*. The warning
|
|
|
|
for :c:func:`Py_DECREF` does not apply with respect to the object passed because
|
2007-08-15 11:28:01 -03:00
|
|
|
the macro carefully uses a temporary variable and sets the argument to *NULL*
|
|
|
|
before decrementing its reference count.
|
|
|
|
|
|
|
|
It is a good idea to use this macro whenever decrementing the value of a
|
|
|
|
variable that might be traversed during garbage collection.
|
|
|
|
|
|
|
|
.. versionadded:: 2.4
|
|
|
|
|
|
|
|
The following functions are for runtime dynamic embedding of Python:
|
2007-12-05 15:49:21 -04:00
|
|
|
``Py_IncRef(PyObject *o)``, ``Py_DecRef(PyObject *o)``. They are
|
2012-01-14 11:42:02 -04:00
|
|
|
simply exported function versions of :c:func:`Py_XINCREF` and
|
|
|
|
:c:func:`Py_XDECREF`, respectively.
|
2007-08-15 11:28:01 -03:00
|
|
|
|
|
|
|
The following functions or macros are only for use within the interpreter core:
|
2012-01-14 11:42:02 -04:00
|
|
|
:c:func:`_Py_Dealloc`, :c:func:`_Py_ForgetReference`, :c:func:`_Py_NewReference`,
|
|
|
|
as well as the global variable :c:data:`_Py_RefTotal`.
|
2007-08-15 11:28:01 -03:00
|
|
|
|