# Allouer des objets dans le tas

PyObject* `_PyObject_New`(PyTypeObject *type)
  Return value: New reference.

PyVarObject* `_PyObject_NewVar`(PyTypeObject *type, Py_ssize_t size)
  Return value: New reference.

PyObject* `PyObject_Init`(PyObject *op, PyTypeObject *type)
  Return value: Borrowed reference.

  Permet d'initialiser un objet op nouvellement alloué ainsi que son type et sa référence initiale. Renvoie l'objet initialisé. La présence de type indique que l'objet doit être traité par le détecteur d'ordures cycliques, il est de ce fait ajouté à l'ensemble du détecteur d'objets observés. Les autres champs de l'objet ne sont pas affectés.

PyVarObject* `PyObject_InitVar`(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
  Return value: Borrowed reference.

  Effectue les mêmes opérations que `PyObject_Init()` fait, et initialise également l'information de la longueur pour un objet de taille variable.

TYPE* `PyObject_New`(TYPE, PyTypeObject *type)
  Return value: New reference.

  Alloue un nouvel objet Python en utilisant le type de structure C TYPE et l'objet Python type. Les champs non définis par l'en-tête de l'objet Python ne sont pas initialisés; le compteur de la référence objet sera égal à un. La taille de l'allocation mémoire est déterminée par le champ `tp_basicsize` de l'objet type.

TYPE* `PyObject_NewVar`(TYPE, PyTypeObject *type, Py_ssize_t size)
  Return value: New reference.

  Alloue un nouvel objet Python en utilisant le type de structure C TYPE et l'objet Python de type type. Les champs non définis par l'en-tête de l'objet Python ne sont pas initialisés. La mémoire allouée est suffisante pour la structure TYPE plus size champs de la taille donnée par le champ de type `tp_itemsize`. Ceci est utile pour l'implémentation d'objets comme les tuples, qui sont capables de déterminer leur taille à la construction. Allouer les champs en même temps que l'objet diminue le nombre d'allocations, améliorant ainsi les performances.

void `PyObject_Del`(void *op)

  Libère la mémoire allouée à un objet utilisant `PyObject_New()` ou `PyObject_NewVar()`. Ceci est normalement appelé par le gestionnaire `tp_dealloc` spécifié dans le type d'objet. Les champs de l'objet ne doivent plus être accédés après cet appel puisque cet emplacement mémoire ne correspond plus à un objet Python valide.

PyObject `_Py_NoneStruct`

  Objet qui est visible en tant que `None` dans Python. Ne devrait être accessible uniquement en utilisant la macro `Py_None`, qui évalue cet objet à un pointeur.

Voir aussi

`PyModule_Create()`

  Allouer et créer des modules d'extension.