17db96d56Sopenharmony_ci.. highlight:: c
27db96d56Sopenharmony_ci
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. _countingrefs:
57db96d56Sopenharmony_ci
67db96d56Sopenharmony_ci******************
77db96d56Sopenharmony_ciReference Counting
87db96d56Sopenharmony_ci******************
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ciThe macros in this section are used for managing reference counts of Python
117db96d56Sopenharmony_ciobjects.
127db96d56Sopenharmony_ci
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci.. c:function:: void Py_INCREF(PyObject *o)
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci   Increment the reference count for object *o*.
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ci   This function is usually used to convert a :term:`borrowed reference` to a
197db96d56Sopenharmony_ci   :term:`strong reference` in-place. The :c:func:`Py_NewRef` function can be
207db96d56Sopenharmony_ci   used to create a new :term:`strong reference`.
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ci   The object must not be ``NULL``; if you aren't sure that it isn't
237db96d56Sopenharmony_ci   ``NULL``, use :c:func:`Py_XINCREF`.
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci.. c:function:: void Py_XINCREF(PyObject *o)
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ci   Increment the reference count for object *o*.  The object may be ``NULL``, in
297db96d56Sopenharmony_ci   which case the macro has no effect.
307db96d56Sopenharmony_ci
317db96d56Sopenharmony_ci   See also :c:func:`Py_XNewRef`.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci.. c:function:: PyObject* Py_NewRef(PyObject *o)
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ci   Create a new :term:`strong reference` to an object: increment the reference
377db96d56Sopenharmony_ci   count of the object *o* and return the object *o*.
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci   When the :term:`strong reference` is no longer needed, :c:func:`Py_DECREF`
407db96d56Sopenharmony_ci   should be called on it to decrement the object reference count.
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci   The object *o* must not be ``NULL``; use :c:func:`Py_XNewRef` if *o* can be
437db96d56Sopenharmony_ci   ``NULL``.
447db96d56Sopenharmony_ci
457db96d56Sopenharmony_ci   For example::
467db96d56Sopenharmony_ci
477db96d56Sopenharmony_ci       Py_INCREF(obj);
487db96d56Sopenharmony_ci       self->attr = obj;
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ci   can be written as::
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci       self->attr = Py_NewRef(obj);
537db96d56Sopenharmony_ci
547db96d56Sopenharmony_ci   See also :c:func:`Py_INCREF`.
557db96d56Sopenharmony_ci
567db96d56Sopenharmony_ci   .. versionadded:: 3.10
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci.. c:function:: PyObject* Py_XNewRef(PyObject *o)
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ci   Similar to :c:func:`Py_NewRef`, but the object *o* can be NULL.
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ci   If the object *o* is ``NULL``, the function just returns ``NULL``.
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci   .. versionadded:: 3.10
667db96d56Sopenharmony_ci
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci.. c:function:: void Py_DECREF(PyObject *o)
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci   Decrement the reference count for object *o*.
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci   If the reference count reaches zero, the object's type's deallocation
737db96d56Sopenharmony_ci   function (which must not be ``NULL``) is invoked.
747db96d56Sopenharmony_ci
757db96d56Sopenharmony_ci   This function is usually used to delete a :term:`strong reference` before
767db96d56Sopenharmony_ci   exiting its scope.
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci   The object must not be ``NULL``; if you aren't sure that it isn't ``NULL``,
797db96d56Sopenharmony_ci   use :c:func:`Py_XDECREF`.
807db96d56Sopenharmony_ci
817db96d56Sopenharmony_ci   .. warning::
827db96d56Sopenharmony_ci
837db96d56Sopenharmony_ci      The deallocation function can cause arbitrary Python code to be invoked (e.g.
847db96d56Sopenharmony_ci      when a class instance with a :meth:`__del__` method is deallocated).  While
857db96d56Sopenharmony_ci      exceptions in such code are not propagated, the executed code has free access to
867db96d56Sopenharmony_ci      all Python global variables.  This means that any object that is reachable from
877db96d56Sopenharmony_ci      a global variable should be in a consistent state before :c:func:`Py_DECREF` is
887db96d56Sopenharmony_ci      invoked.  For example, code to delete an object from a list should copy a
897db96d56Sopenharmony_ci      reference to the deleted object in a temporary variable, update the list data
907db96d56Sopenharmony_ci      structure, and then call :c:func:`Py_DECREF` for the temporary variable.
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci.. c:function:: void Py_XDECREF(PyObject *o)
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ci   Decrement the reference count for object *o*.  The object may be ``NULL``, in
967db96d56Sopenharmony_ci   which case the macro has no effect; otherwise the effect is the same as for
977db96d56Sopenharmony_ci   :c:func:`Py_DECREF`, and the same warning applies.
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_ci.. c:function:: void Py_CLEAR(PyObject *o)
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci   Decrement the reference count for object *o*.  The object may be ``NULL``, in
1037db96d56Sopenharmony_ci   which case the macro has no effect; otherwise the effect is the same as for
1047db96d56Sopenharmony_ci   :c:func:`Py_DECREF`, except that the argument is also set to ``NULL``.  The warning
1057db96d56Sopenharmony_ci   for :c:func:`Py_DECREF` does not apply with respect to the object passed because
1067db96d56Sopenharmony_ci   the macro carefully uses a temporary variable and sets the argument to ``NULL``
1077db96d56Sopenharmony_ci   before decrementing its reference count.
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci   It is a good idea to use this macro whenever decrementing the reference
1107db96d56Sopenharmony_ci   count of an object that might be traversed during garbage collection.
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci.. c:function:: void Py_IncRef(PyObject *o)
1137db96d56Sopenharmony_ci
1147db96d56Sopenharmony_ci   Increment the reference count for object *o*. A function version of :c:func:`Py_XINCREF`.
1157db96d56Sopenharmony_ci   It can be used for runtime dynamic embedding of Python.
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci
1187db96d56Sopenharmony_ci.. c:function:: void Py_DecRef(PyObject *o)
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci   Decrement the reference count for object *o*. A function version of :c:func:`Py_XDECREF`.
1217db96d56Sopenharmony_ci   It can be used for runtime dynamic embedding of Python.
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ciThe following functions or macros are only for use within the interpreter core:
1257db96d56Sopenharmony_ci:c:func:`_Py_Dealloc`, :c:func:`_Py_ForgetReference`, :c:func:`_Py_NewReference`,
1267db96d56Sopenharmony_cias well as the global variable :c:data:`_Py_RefTotal`.
1277db96d56Sopenharmony_ci
128