2008-01-19 18:08:21 -04:00
|
|
|
.. highlightlang:: c
|
|
|
|
|
|
|
|
.. _allocating-objects:
|
|
|
|
|
|
|
|
Allocating Objects on the Heap
|
|
|
|
==============================
|
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: PyObject* _PyObject_New(PyTypeObject *type)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: PyVarObject* _PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 14:59:03 -03:00
|
|
|
.. versionchanged:: 2.5
|
2012-01-14 11:42:02 -04:00
|
|
|
This function used an :c:type:`int` type for *size*. This might require
|
2009-04-25 14:59:03 -03:00
|
|
|
changes in your code for properly supporting 64-bit systems.
|
|
|
|
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: void _PyObject_Del(PyObject *op)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: PyObject* PyObject_Init(PyObject *op, PyTypeObject *type)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Initialize a newly-allocated object *op* with its type and initial
|
|
|
|
reference. Returns the initialized object. If *type* indicates that the
|
|
|
|
object participates in the cyclic garbage detector, it is added to the
|
|
|
|
detector's set of observed objects. Other fields of the object are not
|
|
|
|
affected.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: PyVarObject* PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
This does everything :c:func:`PyObject_Init` does, and also initializes the
|
2008-01-19 18:08:21 -04:00
|
|
|
length information for a variable-size object.
|
|
|
|
|
2009-04-25 16:46:19 -03:00
|
|
|
.. versionchanged:: 2.5
|
2012-01-14 11:42:02 -04:00
|
|
|
This function used an :c:type:`int` type for *size*. This might require
|
2009-04-25 16:46:19 -03:00
|
|
|
changes in your code for properly supporting 64-bit systems.
|
|
|
|
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: TYPE* PyObject_New(TYPE, PyTypeObject *type)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Allocate a new Python object using the C structure type *TYPE* and the
|
|
|
|
Python type object *type*. Fields not defined by the Python object header
|
|
|
|
are not initialized; the object's reference count will be one. The size of
|
|
|
|
the memory allocation is determined from the :attr:`tp_basicsize` field of
|
|
|
|
the type object.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: TYPE* PyObject_NewVar(TYPE, PyTypeObject *type, Py_ssize_t size)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Allocate a new Python object using the C structure type *TYPE* and the
|
|
|
|
Python type object *type*. Fields not defined by the Python object header
|
|
|
|
are not initialized. The allocated memory allows for the *TYPE* structure
|
|
|
|
plus *size* fields of the size given by the :attr:`tp_itemsize` field of
|
|
|
|
*type*. This is useful for implementing objects like tuples, which are
|
|
|
|
able to determine their size at construction time. Embedding the array of
|
|
|
|
fields into the same allocation decreases the number of allocations,
|
|
|
|
improving the memory management efficiency.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 16:46:19 -03:00
|
|
|
.. versionchanged:: 2.5
|
2012-01-14 11:42:02 -04:00
|
|
|
This function used an :c:type:`int` type for *size*. This might require
|
2009-04-25 16:46:19 -03:00
|
|
|
changes in your code for properly supporting 64-bit systems.
|
|
|
|
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: void PyObject_Del(PyObject *op)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
Releases memory allocated to an object using :c:func:`PyObject_New` or
|
|
|
|
:c:func:`PyObject_NewVar`. This is normally called from the
|
2009-04-25 15:53:48 -03:00
|
|
|
:attr:`tp_dealloc` handler specified in the object's type. The fields of
|
|
|
|
the object should not be accessed after this call as the memory is no
|
|
|
|
longer a valid Python object.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: PyObject* Py_InitModule(char *name, PyMethodDef *methods)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Create a new module object based on a name and table of functions,
|
|
|
|
returning the new module object.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
.. versionchanged:: 2.3
|
2009-04-25 15:53:48 -03:00
|
|
|
Older versions of Python did not support *NULL* as the value for the
|
|
|
|
*methods* argument.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: PyObject* Py_InitModule3(char *name, PyMethodDef *methods, char *doc)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Create a new module object based on a name and table of functions,
|
|
|
|
returning the new module object. If *doc* is non-*NULL*, it will be used
|
|
|
|
to define the docstring for the module.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
.. versionchanged:: 2.3
|
2009-04-25 15:53:48 -03:00
|
|
|
Older versions of Python did not support *NULL* as the value for the
|
|
|
|
*methods* argument.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:function:: PyObject* Py_InitModule4(char *name, PyMethodDef *methods, char *doc, PyObject *self, int apiver)
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Create a new module object based on a name and table of functions,
|
|
|
|
returning the new module object. If *doc* is non-*NULL*, it will be used
|
|
|
|
to define the docstring for the module. If *self* is non-*NULL*, it will
|
|
|
|
passed to the functions of the module as their (otherwise *NULL*) first
|
|
|
|
parameter. (This was added as an experimental feature, and there are no
|
|
|
|
known uses in the current version of Python.) For *apiver*, the only value
|
|
|
|
which should be passed is defined by the constant
|
|
|
|
:const:`PYTHON_API_VERSION`.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Most uses of this function should probably be using the
|
2012-01-14 11:42:02 -04:00
|
|
|
:c:func:`Py_InitModule3` instead; only use this if you are sure you need
|
2009-04-25 15:53:48 -03:00
|
|
|
it.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
.. versionchanged:: 2.3
|
2009-04-25 15:53:48 -03:00
|
|
|
Older versions of Python did not support *NULL* as the value for the
|
|
|
|
*methods* argument.
|
2008-01-19 18:08:21 -04:00
|
|
|
|
|
|
|
|
2012-01-14 11:42:02 -04:00
|
|
|
.. c:var:: PyObject _Py_NoneStruct
|
2008-01-19 18:08:21 -04:00
|
|
|
|
2009-04-25 15:53:48 -03:00
|
|
|
Object which is visible in Python as ``None``. This should only be
|
|
|
|
accessed using the ``Py_None`` macro, which evaluates to a pointer to this
|
|
|
|
object.
|