Счётчик ссылок
Макросы в этом разделе используются для управления счётчиками ссылок на объекты Python.
-
void Py_INCREF(PyObject *o) -
Увеличивает счётчик ссылок для объекта o. Объект не должен быть
NULL; если вы не уверены, что он неNULL, используйтеPy_XINCREF().
-
void Py_XINCREF(PyObject *o) -
Увеличивает счётчик ссылок для объекта o. Объект может быть
NULL, в этом случае макрос не имеет эффекта.
-
void Py_DECREF(PyObject *o) -
Уменьшает счётчик ссылок для объекта o. Объект не должен быть
NULL; если вы не уверены, что он неNULL, используйтеPy_XDECREF(). Если счётчик ссылок достигнет нуля, вызывается функция освобождения типа объекта (которая не должна бытьNULL) .Предупреждение
Функция освобождения может вызвать произвольный код Python (например, при освобождении экземпляра класса с методом
__del__()). Хотя исключения в таком коде не обрабатываются, исполняемый код имеет свободный доступ ко всем глобальным переменным Python. Это означает, что любой объект, доступный из глобальной переменной, должен находиться в согласованном состоянии перед вызовомPy_DECREF(). Например, код удаления объекта из списка должен скопировать ссылку на удалённый объект во временную переменную, обновить структуру данных списка, а затем вызватьPy_DECREF()для временной переменной.
-
void Py_XDECREF(PyObject *o) -
Уменьшает счётчик ссылок для объекта o. Объект может быть
NULL, в этом случае макрос не имеет эффекта; в противном случае эффект такой же, как уPy_DECREF(), и предупреждение такое же.
-
void Py_CLEAR(PyObject *o) -
Уменьшает счётчик ссылок для объекта o. Объект может быть
NULL, в этом случае макрос не имеет эффекта; в противном случае эффект такой же, как уPy_DECREF(), за исключением того, что аргумент также устанавливается вNULL. Предупреждение дляPy_DECREF()не относится к переданному объекту, поскольку макрос тщательно использует временную переменную и устанавливает аргумент вNULLперед уменьшением счётчика ссылок.Рекомендуется использовать этот макрос всякий раз, когда уменьшается счётчик ссылок объекта, который может быть просмотрен во время сбора мусора.
Следующие функции предназначены для динамической работы с внедрением Python во время выполнения: Py_IncRef(PyObject *o), Py_DecRef(PyObject *o). Они представляют собой просто экспортированные версии функций Py_XINCREF() и Py_XDECREF() соответственно.
Следующие функции или макросы предназначены только для использования внутри ядра интерпретатора: _Py_Dealloc(), _Py_ForgetReference(), _Py_NewReference(), а также глобальная переменная _Py_RefTotal.
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/refcounting.html