> **Источник:** https://python-all.ru/3.2/c-api/weakref.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# Объекты слабых ссылок

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

#### `int PyWeakref_Check(ob)`

Возвращает true, если *ob* является объектом ссылки или прокси.

#### `int PyWeakref_CheckRef(ob)`

Возвращает true, если *ob* является объектом ссылки.

#### `int PyWeakref_CheckProxy(ob)`

Возвращает true, если *ob* является прокси-объектом.

#### `PyObject* PyWeakref_NewRef(PyObject *ob, PyObject *callback)`

*Возвращаемое значение: новая ссылка.*

Возвращает объект слабой ссылки для объекта *ob*. Всегда возвращает новую ссылку, но не гарантирует создания нового объекта; может быть возвращён существующий объект ссылки. Второй параметр, *колбэк*, может быть вызываемым объектом, который получает уведомление, когда *ob* собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. *колбэк* также может быть `None` или *NULL*. Если *ob* не является объектом, поддерживающим слабые ссылки, или если *колбэк* не является вызываемым, `None` или *NULL*, то возвращается *NULL* и возбуждается [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError).

#### `PyObject* PyWeakref_NewProxy(PyObject *ob, PyObject *callback)`

*Возвращаемое значение: новая ссылка.*

Возвращает прокси-объект слабой ссылки для объекта *ob*. Всегда возвращает новую ссылку, но не гарантирует создания нового объекта; существующий прокси-объект может быть возвращён. Второй параметр, *колбэк*, может быть вызываемым объектом, который получает уведомление, когда *ob* собирается сборщиком мусора; он должен принимать один параметр – сам объект слабой ссылки. *колбэк* также может быть `None` или *NULL*. Если *ob* не является объектом, поддерживающим слабые ссылки, или если *колбэк* не является вызываемым, `None` или *NULL*, то возвращается *NULL* и возбуждается [`TypeError`](https://python-all.ru/3.2/library/exceptions.html#TypeError).

#### `PyObject* PyWeakref_GetObject(PyObject *ref)`

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

Возвращает объект, на который ссылается слабая ссылка *ref*. Если объект ссылки больше не существует, возвращает `Py_None`.

> **Примечание**
>
> Эта функция возвращает **заимствованную ссылку** на целевой объект. Это означает, что всегда следует вызывать [`Py_INCREF()`](https://python-all.ru/3.2/c-api/refcounting.html#Py_INCREF) для объекта, если только вы не уверены, что он не может быть уничтожен, пока вы всё ещё используете его.

#### `PyObject* PyWeakref_GET_OBJECT(PyObject *ref)`

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

Аналогична [`PyWeakref_GetObject()`](https://python-all.ru/3.2/c-api/weakref.html#PyWeakref_GetObject), но реализована как макрос, не выполняющий проверку ошибок.
