Контрольный подсчет¶
Макросы в этом разделе используются для управления количеством ссылок на объекты Python.
-
void
Py_INCREF
(PyObject *o)¶ Увеличение количества ссылок для объекта o.
Эта функция обычно используется для преобразования borrowed reference в strong reference на месте. Функция
Py_NewRef()
может быть использована для создания нового strong reference.Объект не должен быть
NULL
; если вы не уверены, что он неNULL
, используйтеPy_XINCREF()
.
-
void
Py_XINCREF
(PyObject *o)¶ Увеличить количество ссылок для объекта o. Объект может быть
NULL
, в этом случае макрос не имеет эффекта.См. также
Py_XNewRef()
.
-
PyObject *
Py_NewRef
(PyObject *o)¶ - Part of the Stable ABI since version 3.10.
Создайте новую ссылку strong reference на объект: увеличьте счетчик ссылок на объект o и верните объект o.
Когда strong reference больше не нужен, следует вызвать
Py_DECREF()
для уменьшения количества ссылок на объект.Объект o не должен быть
NULL
; используйтеPy_XNewRef()
, если o может бытьNULL
.Например:
Py_INCREF(obj); self->attr = obj;
можно записать как:
self->attr = Py_NewRef(obj);
См. также
Py_INCREF()
.Добавлено в версии 3.10.
-
PyObject *
Py_XNewRef
(PyObject *o)¶ - Part of the Stable ABI since version 3.10.
Аналогично
Py_NewRef()
, но объект o может быть NULL.Если объект o равен
NULL
, функция просто возвращаетNULL
.Добавлено в версии 3.10.
-
void
Py_DECREF
(PyObject *o)¶ Уменьшить количество ссылок для объекта o.
Если количество ссылок достигает нуля, вызывается функция деаллокации типа объекта (которая не должна быть
NULL
).Эта функция обычно используется для удаления strong reference перед выходом из области видимости.
Объект не должен быть
NULL
; если вы не уверены, что он неNULL
, используйтеPy_XDECREF()
.Предупреждение
Функция deallocation может вызвать произвольный код 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
перед уменьшением количества ссылок.Рекомендуется использовать этот макрос при уменьшении количества ссылок на объект, который может быть пройден во время сборки мусора.
-
void
Py_IncRef
(PyObject *o)¶ - Part of the Stable ABI.
Увеличение количества ссылок для объекта o. Версия функции
Py_XINCREF()
. Может использоваться для динамического встраивания Python во время выполнения.
-
void
Py_DecRef
(PyObject *o)¶ - Part of the Stable ABI.
Уменьшение количества ссылок для объекта o. Версия функции
Py_XDECREF()
. Может использоваться для динамического встраивания Python во время выполнения.
Следующие функции или макросы предназначены только для использования в ядре интерпретатора: _Py_Dealloc()
, _Py_ForgetReference()
, _Py_NewReference()
, а также глобальная переменная _Py_RefTotal
.