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