| .. highlightlang:: c | 
 |  | 
 | .. _cell-objects: | 
 |  | 
 | Cell Objects | 
 | ------------ | 
 |  | 
 | "Cell" objects are used to implement variables referenced by multiple scopes. | 
 | For each such variable, a cell object is created to store the value; the local | 
 | variables of each stack frame that references the value contains a reference to | 
 | the cells from outer scopes which also use that variable.  When the value is | 
 | accessed, the value contained in the cell is used instead of the cell object | 
 | itself.  This de-referencing of the cell object requires support from the | 
 | generated byte-code; these are not automatically de-referenced when accessed. | 
 | Cell objects are not likely to be useful elsewhere. | 
 |  | 
 |  | 
 | .. c:type:: PyCellObject | 
 |  | 
 |    The C structure used for cell objects. | 
 |  | 
 |  | 
 | .. c:var:: PyTypeObject PyCell_Type | 
 |  | 
 |    The type object corresponding to cell objects. | 
 |  | 
 |  | 
 | .. c:function:: int PyCell_Check(ob) | 
 |  | 
 |    Return true if *ob* is a cell object; *ob* must not be *NULL*. | 
 |  | 
 |  | 
 | .. c:function:: PyObject* PyCell_New(PyObject *ob) | 
 |  | 
 |    Create and return a new cell object containing the value *ob*. The parameter may | 
 |    be *NULL*. | 
 |  | 
 |  | 
 | .. c:function:: PyObject* PyCell_Get(PyObject *cell) | 
 |  | 
 |    Return the contents of the cell *cell*. | 
 |  | 
 |  | 
 | .. c:function:: PyObject* PyCell_GET(PyObject *cell) | 
 |  | 
 |    Return the contents of the cell *cell*, but without checking that *cell* is | 
 |    non-*NULL* and a cell object. | 
 |  | 
 |  | 
 | .. c:function:: int PyCell_Set(PyObject *cell, PyObject *value) | 
 |  | 
 |    Set the contents of the cell object *cell* to *value*.  This releases the | 
 |    reference to any current content of the cell. *value* may be *NULL*.  *cell* | 
 |    must be non-*NULL*; if it is not a cell object, ``-1`` will be returned.  On | 
 |    success, ``0`` will be returned. | 
 |  | 
 |  | 
 | .. c:function:: void PyCell_SET(PyObject *cell, PyObject *value) | 
 |  | 
 |    Sets the value of the cell object *cell* to *value*.  No reference counts are | 
 |    adjusted, and no checks are made for safety; *cell* must be non-*NULL* and must | 
 |    be a cell object. |