| 
									
										
										
										
											2019-05-17 11:55:34 +02:00
										 |  |  | .. highlight:: c
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. _countingrefs:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ******************
 | 
					
						
							|  |  |  | Reference Counting
 | 
					
						
							|  |  |  | ******************
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 15:22:38 +01:00
										 |  |  | The functions and macros in this section are used for managing reference counts
 | 
					
						
							|  |  |  | of Python objects.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-15 07:56:14 -07:00
										 |  |  | .. c:function:: Py_ssize_t Py_REFCNT(PyObject *o)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Get the reference count of the Python object *o*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Use the :c:func:`Py_SET_REFCNT()` function to set an object reference count.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.11
 | 
					
						
							|  |  |  |       The parameter type is no longer :c:expr:`const PyObject*`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.10
 | 
					
						
							|  |  |  |       :c:func:`Py_REFCNT()` is changed to the inline static function.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: void Py_SET_REFCNT(PyObject *o, Py_ssize_t refcnt)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Set the object *o* reference counter to *refcnt*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.9
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void Py_INCREF(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-09 13:40:47 +01:00
										 |  |  |    Increment the reference count for object *o*.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-09 13:40:47 +01:00
										 |  |  |    This function is usually used to convert a :term:`borrowed reference` to a
 | 
					
						
							|  |  |  |    :term:`strong reference` in-place. The :c:func:`Py_NewRef` function can be
 | 
					
						
							|  |  |  |    used to create a new :term:`strong reference`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The object must not be ``NULL``; if you aren't sure that it isn't
 | 
					
						
							|  |  |  |    ``NULL``, use :c:func:`Py_XINCREF`.
 | 
					
						
							| 
									
										
										
										
											2020-11-05 15:02:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void Py_XINCREF(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    Increment the reference count for object *o*.  The object may be ``NULL``, in
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    which case the macro has no effect.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 15:02:12 +01:00
										 |  |  |    See also :c:func:`Py_XNewRef`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: PyObject* Py_NewRef(PyObject *o)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-09 13:40:47 +01:00
										 |  |  |    Create a new :term:`strong reference` to an object: increment the reference
 | 
					
						
							|  |  |  |    count of the object *o* and return the object *o*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    When the :term:`strong reference` is no longer needed, :c:func:`Py_DECREF`
 | 
					
						
							|  |  |  |    should be called on it to decrement the object reference count.
 | 
					
						
							| 
									
										
										
										
											2020-11-05 15:02:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-09 13:40:47 +01:00
										 |  |  |    The object *o* must not be ``NULL``; use :c:func:`Py_XNewRef` if *o* can be
 | 
					
						
							|  |  |  |    ``NULL``.
 | 
					
						
							| 
									
										
										
										
											2020-11-05 15:02:12 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |    For example::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Py_INCREF(obj);
 | 
					
						
							|  |  |  |        self->attr = obj;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    can be written as::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        self->attr = Py_NewRef(obj);
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-09 13:40:47 +01:00
										 |  |  |    See also :c:func:`Py_INCREF`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 15:02:12 +01:00
										 |  |  |    .. versionadded:: 3.10
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: PyObject* Py_XNewRef(PyObject *o)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Similar to :c:func:`Py_NewRef`, but the object *o* can be NULL.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If the object *o* is ``NULL``, the function just returns ``NULL``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.10
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void Py_DECREF(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-09 13:40:47 +01:00
										 |  |  |    Decrement the reference count for object *o*.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    If the reference count reaches zero, the object's type's deallocation
 | 
					
						
							|  |  |  |    function (which must not be ``NULL``) is invoked.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    This function is usually used to delete a :term:`strong reference` before
 | 
					
						
							|  |  |  |    exiting its scope.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The object must not be ``NULL``; if you aren't sure that it isn't ``NULL``,
 | 
					
						
							|  |  |  |    use :c:func:`Py_XDECREF`.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    .. warning::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       The deallocation function can cause arbitrary Python code to be invoked (e.g.
 | 
					
						
							| 
									
										
										
										
											2023-07-23 11:23:44 +02:00
										 |  |  |       when a class instance with a :meth:`~object.__del__` method is deallocated).  While
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |       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
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |       a global variable should be in a consistent state before :c:func:`Py_DECREF` is
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00: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
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |       structure, and then call :c:func:`Py_DECREF` for the temporary variable.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void Py_XDECREF(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    Decrement the reference count for object *o*.  The object may be ``NULL``, in
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    which case the macro has no effect; otherwise the effect is the same as for
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |    :c:func:`Py_DECREF`, and the same warning applies.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  | .. c:function:: void Py_CLEAR(PyObject *o)
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    Decrement the reference count for object *o*.  The object may be ``NULL``, in
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    which case the macro has no effect; otherwise the effect is the same as for
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    :c:func:`Py_DECREF`, except that the argument is also set to ``NULL``.  The warning
 | 
					
						
							| 
									
										
										
										
											2010-10-06 10:11:56 +00:00
										 |  |  |    for :c:func:`Py_DECREF` does not apply with respect to the object passed because
 | 
					
						
							| 
									
										
										
										
											2019-10-30 12:03:20 +02:00
										 |  |  |    the macro carefully uses a temporary variable and sets the argument to ``NULL``
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  |    before decrementing its reference count.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-17 21:57:03 +09:00
										 |  |  |    It is a good idea to use this macro whenever decrementing the reference
 | 
					
						
							|  |  |  |    count of an object that might be traversed during garbage collection.
 | 
					
						
							| 
									
										
										
										
											2007-08-15 14:28:22 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-12-07 15:22:38 +01:00
										 |  |  |    .. versionchanged:: 3.12
 | 
					
						
							|  |  |  |       The macro argument is now only evaluated once. If the argument has side
 | 
					
						
							|  |  |  |       effects, these are no longer duplicated.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-18 16:42:05 +08:00
										 |  |  | .. c:function:: void Py_IncRef(PyObject *o)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Increment the reference count for object *o*. A function version of :c:func:`Py_XINCREF`.
 | 
					
						
							|  |  |  |    It can be used for runtime dynamic embedding of Python.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:function:: void Py_DecRef(PyObject *o)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Decrement the reference count for object *o*. A function version of :c:func:`Py_XDECREF`.
 | 
					
						
							|  |  |  |    It can be used for runtime dynamic embedding of Python.
 | 
					
						
							| 
									
										
										
										
											2022-12-07 15:22:38 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:macro:: Py_SETREF(dst, src)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Macro safely decrementing the `dst` reference count and setting `dst` to
 | 
					
						
							|  |  |  |    `src`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    As in case of :c:func:`Py_CLEAR`, "the obvious" code can be deadly::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        Py_DECREF(dst);
 | 
					
						
							|  |  |  |        dst = src;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    The safe way is::
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Py_SETREF(dst, src);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    That arranges to set `dst` to `src` _before_ decrementing reference count of
 | 
					
						
							|  |  |  |    *dst* old value, so that any code triggered as a side-effect of `dst`
 | 
					
						
							|  |  |  |    getting torn down no longer believes `dst` points to a valid object.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.6
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.12
 | 
					
						
							|  |  |  |       The macro arguments are now only evaluated once. If an argument has side
 | 
					
						
							|  |  |  |       effects, these are no longer duplicated.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. c:macro:: Py_XSETREF(dst, src)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    Variant of :c:macro:`Py_SETREF` macro that uses :c:func:`Py_XDECREF` instead
 | 
					
						
							|  |  |  |    of :c:func:`Py_DECREF`.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionadded:: 3.6
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    .. versionchanged:: 3.12
 | 
					
						
							|  |  |  |       The macro arguments are now only evaluated once. If an argument has side
 | 
					
						
							|  |  |  |       effects, these are no longer duplicated.
 |