Контрольный подсчет

Макросы в этом разделе используются для управления количеством ссылок на объекты 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.

Вернуться на верх