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

---

# Объекты-ячейки

Объекты «Cell» используются для реализации переменных, на которые ссылаются несколько областей видимости. Для каждой такой переменной создаётся объект ячейки, хранящий значение; локальные переменные каждого стекового кадра, ссылающегося на значение, содержат ссылку на ячейки из внешних областей видимости, которые также используют эту переменную. При обращении к значению используется значение, хранящееся в ячейке, а не сам объект ячейки. Такое разыменование объекта ячейки требует поддержки со стороны генерируемого байт-кода; они не разыменовываются автоматически при обращении. Скорее всего, объекты ячеек не пригодятся где-либо ещё.

**`PyCellObject`**

C-структура, используемая для объектов-ячеек.

**[PyTypeObject](https://python-all.ru/3.9/c-api/type.html#c.PyTypeObject) `PyCell_Type`**

Объект типа, соответствующий объектам-ячейкам.

#### `int PyCell_Check(ob)`

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

#### `PyObject* PyCell_New(PyObject *ob)`

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

Создаёт и возвращает новый объект-ячейку, содержащий значение *ob*. Параметр может быть `NULL`.

#### `PyObject* PyCell_Get(PyObject *cell)`

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

Возвращает содержимое ячейки *cell*.

#### `PyObject* PyCell_GET(PyObject *cell)`

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

Возвращает содержимое ячейки *cell*, но без проверки того, что *cell* не является `NULL` и является объектом-ячейкой.

#### `int PyCell_Set(PyObject *cell, PyObject *value)`

Устанавливает содержимое объекта-ячейки *cell* в *value*. Это освобождает ссылку на предыдущее содержимое ячейки. *value* может быть `NULL`. *cell* не должен быть `NULL`; если это не объект-ячейка, возвращается `-1`. В случае успеха возвращается `0`.

#### `void PyCell_SET(PyObject *cell, PyObject *value)`

Устанавливает значение объекта-ячейки *cell* в *value*. Счётчики ссылок не корректируются, проверки безопасности не выполняются; *cell* должен быть не-`NULL` и должен быть объектом-ячейкой.
