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