Объекты слабых ссылок – документация Python 3.12
Документация Python неофициальный перевод

Объекты слабых ссылокWeak Reference Objects

Python поддерживает слабые ссылки как объекты первого класса. Существует два конкретных типа объектов, которые напрямую реализуют слабые ссылки. Первый – простой объект-ссылка, а второй действует как прокси для исходного объекта, насколько это возможно.

int PyWeakref_Check(PyObject *ob)

Возвращает true, если ob является объектом слабой ссылки или прокси-объектом. Эта функция всегда завершается успешно.

int PyWeakref_CheckRef(PyObject *ob)

Возвращает true, если ob является объектом слабой ссылки. Эта функция всегда завершается успешно.

int PyWeakref_CheckProxy(PyObject *ob)

Возвращает true, если ob является прокси-объектом. Эта функция всегда завершается успешно.

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Возвращаемое значение: новая ссылка. Часть Stable ABI.

Возвращает объект слабой ссылки для объекта ob. Эта функция всегда возвращает новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий объект ссылки. Второй параметр, callback, может быть вызываемым объектом, который получает уведомление, когда ob собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. callback также может быть None или NULL. Если ob не является объектом, поддерживающим слабые ссылки, или callback не является вызываемым, None или NULL, функция возвращает NULL и возбуждает TypeError.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Возвращаемое значение: новая ссылка. Часть Stable ABI.

Возвращает объект-прокси слабой ссылки для объекта ob. Эта функция всегда возвращает новую ссылку, но не гарантирует создание нового объекта; может быть возвращён существующий прокси-объект. Второй параметр, callback, может быть вызываемым объектом, который получает уведомление, когда ob собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. callback также может быть None или NULL. Если ob не является объектом, поддерживающим слабые ссылки, или callback не является вызываемым, None или NULL, функция возвращает NULL и возбуждает TypeError.

PyObject *PyWeakref_GetObject(PyObject *ref)
Возвращаемое значение: заимствованная ссылка. Часть Stable ABI.

Возвращает объект, на который ссылается слабая ссылка ref. Если этот объект уже удалён, возвращает Py_None.

Примечание

Эта функция возвращает заимствованную ссылку на целевой объект. Это означает, что для объекта всегда следует вызывать Py_INCREF(), за исключением случаев, когда он не может быть уничтожен до последнего использования заимствованной ссылки.

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
Возвращаемое значение: заимствованная ссылка.

Аналогично PyWeakref_GetObject(), но без проверки ошибок.

void PyObject_ClearWeakRefs(PyObject *object)
Часть Stable ABI.

Эта функция вызывается обработчиком tp_dealloc для очистки слабых ссылок.

Эта функция перебирает слабые ссылки для object и вызывает колбэки для тех ссылок, у которых они есть. Она завершает работу, когда все колбэки были вызваны.