There are a large number of structures which are used in the
definition of object types for Python. This section describes
these structures and how they are used. All Python objects
ultimately share a small number of fields at the beginning of
the object’s representation in memory. These are represented by
the PyObject and PyVarObject types, which are defined, in turn,
by the expansions of some macros also used, whether directly or
indirectly, in the definition of all other Python objects. All
object types are extensions of this type. This is a type which
contains the information Python needs to treat a pointer to an
object as an object. In a normal “release” build, it contains
only the object’s reference count and a pointer to the
corresponding type object. It corresponds to the fields defined
by the expansion of the PyObject_HEAD macro. This is an
extension of PyObject that adds the ob_size field. This is only
used for objects that have some notion of length. This type does
not often appear in the Python/C