Подсчет ссылок

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