2007-08-15 16:28:22 +02:00
|
|
|
.. 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.
|
|
|
|
|
|
|
|
|
|
|
|
The following functions are for runtime dynamic embedding of Python:
|
Merged revisions 59333-59370 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r59343 | georg.brandl | 2007-12-05 08:02:47 +0100 (Wed, 05 Dec 2007) | 2 lines
Fix typo.
........
r59347 | christian.heimes | 2007-12-05 13:31:44 +0100 (Wed, 05 Dec 2007) | 1 line
Fixed quoting and paths in the sqlite project file
........
r59348 | christian.heimes | 2007-12-05 13:45:11 +0100 (Wed, 05 Dec 2007) | 1 line
Fixed error in regrtest. I must have missed the spot.
........
r59350 | christian.heimes | 2007-12-05 13:49:14 +0100 (Wed, 05 Dec 2007) | 1 line
merge -r59315:59316 from py3k: Fix issue #1553: An errornous __length_hint__ can make list() raise a SystemError
........
r59352 | christian.heimes | 2007-12-05 13:52:34 +0100 (Wed, 05 Dec 2007) | 1 line
Added msg to Misc/NEWS
........
r59354 | andrew.kuchling | 2007-12-05 14:27:20 +0100 (Wed, 05 Dec 2007) | 1 line
Spelling fix
........
r59356 | georg.brandl | 2007-12-05 18:56:50 +0100 (Wed, 05 Dec 2007) | 3 lines
Add examples to csv, pprint and traceback docs.
Written by Ross for GHOP.
........
r59358 | raymond.hettinger | 2007-12-05 19:11:08 +0100 (Wed, 05 Dec 2007) | 1 line
Error checking was too aggressive (reported by Chris Tismer)
........
r59359 | georg.brandl | 2007-12-05 19:30:48 +0100 (Wed, 05 Dec 2007) | 2 lines
Add examples to re docs. Written for GHOP by Dan Finnie.
........
r59366 | georg.brandl | 2007-12-05 20:49:21 +0100 (Wed, 05 Dec 2007) | 2 lines
Fix markup.
........
r59367 | christian.heimes | 2007-12-05 20:57:54 +0100 (Wed, 05 Dec 2007) | 1 line
Updated documentation and build_tkinter.py script
........
r59368 | georg.brandl | 2007-12-05 21:03:57 +0100 (Wed, 05 Dec 2007) | 2 lines
Another markup fix.
........
r59369 | ronald.oussoren | 2007-12-05 21:07:36 +0100 (Wed, 05 Dec 2007) | 7 lines
This "fixes" compilation issues for the Carbon._OSA module on OSX Leopard
by purging bindings to OSA's debug API's. Those APIs we're completely
unsupported on OSX 10.4 and are no longer available on OSX 10.5.
Note that this patches a generated file. This is somewhat acceptable because
regenerating the file is non-trivial and wouldn't use system headers anyway.
........
r59370 | christian.heimes | 2007-12-05 21:10:38 +0100 (Wed, 05 Dec 2007) | 1 line
Fixed bug #1557 by using popen.communicate() before popen.wait()
........
2007-12-05 21:18:38 +01:00
|
|
|
``Py_IncRef(PyObject *o)``, ``Py_DecRef(PyObject *o)``. They are
|
|
|
|
simply exported function versions of :cfunc:`Py_XINCREF` and
|
|
|
|
:cfunc:`Py_XDECREF`, respectively.
|
2007-08-15 16:28:22 +02:00
|
|
|
|
|
|
|
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`.
|
|
|
|
|