/Doc/c-api/refcounting.rst
http://unladen-swallow.googlecode.com/ · ReStructuredText · 74 lines · 48 code · 26 blank · 0 comment · 0 complexity · a0f24494003dfe2d666b331f57e5a1be MD5 · raw file
- .. highlightlang:: c
- .. _countingrefs:
- ******************
- Reference Counting
- ******************
- The macros in this section are used for managing reference counts of Python
- objects.
- .. cfunction:: void Py_INCREF(PyObject *o)
- Increment the reference count for object *o*. The object must not be *NULL*; if
- you aren't sure that it isn't *NULL*, use :cfunc:`Py_XINCREF`.
- .. cfunction:: void Py_XINCREF(PyObject *o)
- Increment the reference count for object *o*. The object may be *NULL*, in
- which case the macro has no effect.
- .. cfunction:: void Py_DECREF(PyObject *o)
- Decrement the reference count for object *o*. The object must not be *NULL*; if
- you aren't sure that it isn't *NULL*, use :cfunc:`Py_XDECREF`. If the reference
- 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
- a global variable should be in a consistent state before :cfunc:`Py_DECREF` is
- 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
- structure, and then call :cfunc:`Py_DECREF` for the temporary variable.
- .. cfunction:: void Py_XDECREF(PyObject *o)
- 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
- :cfunc:`Py_DECREF`, and the same warning applies.
- .. cfunction:: void Py_CLEAR(PyObject *o)
- 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
- :cfunc:`Py_DECREF`, except that the argument is also set to *NULL*. The warning
- for :cfunc:`Py_DECREF` does not apply with respect to the object passed because
- 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:
- ``Py_IncRef(PyObject *o)``, ``Py_DecRef(PyObject *o)``. They are
- simply exported function versions of :cfunc:`Py_XINCREF` and
- :cfunc:`Py_XDECREF`, respectively.
- The following functions or macros are only for use within the interpreter core:
- :cfunc:`_Py_Dealloc`, :cfunc:`_Py_ForgetReference`, :cfunc:`_Py_NewReference`,
- as well as the global variable :cdata:`_Py_RefTotal`.