Objekte auf dem Heap zuweisen
*****************************

PyObject *_PyObject_New(PyTypeObject *type)
    *Rückgabewert: neue Referenz.*

PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)
    *Rückgabewert: neue Referenz.*

PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)
    *Rückgabewert: geliehene Referenz.** Teil der Stable ABI.*

   Initialisiert ein neu zugewiesenes Objekt *op* mit seinem Typ und
   seiner Anfangsreferenz. Gibt das initialisierte Objekt zurück.
   Andere Felder des Objekts werden nicht initialisiert. Trotz ihres
   Namens steht diese Funktion in keinem Zusammenhang mit der Methode
   „ "__init__()" “ des Objekts (Slot „"tp_init" “). Insbesondere ruft
   diese Funktion die Methode „ "__init__()" “ des Objekts **nicht**
   auf.

   Im Allgemeinen sollten Sie diese Funktion als Low-Level-Routine
   betrachten. Verwenden Sie nach Möglichkeit „ "tp_alloc" “. Zur
   Implementierung von „ "tp_alloc" “ für Ihren Typ sollten Sie „
   "PyType_GenericAlloc()" “ oder „ "PyObject_New()" “ bevorzugen.

   Bemerkung:

     Diese Funktion initialisiert lediglich den Speicher des Objekts,
     der der Struktur „ "PyObject" “ entspricht. Der Rest wird nicht
     auf Null gesetzt.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
    *Rückgabewert: geliehene Referenz.** Teil der Stable ABI.*

   Diese Funktion bietet denselben Funktionsumfang wie
   "PyObject_Init()" und initialisiert darüber hinaus die
   Längenangaben für ein Objekt mit variabler Größe.

   Bemerkung:

     This function only initializes some of the object's memory.  It
     does not zero the rest.

PyObject_New(TYPE, typeobj)

   Weist ein neues Python-Objekt unter Verwendung des C-Strukturtyps
   *TYPE* und des Python-Objekttyps *typeobj* ("PyTypeObject*") zu,
   indem mit "PyObject_Malloc()" Speicher zugewiesen und dieser wie in
   "PyObject_Init()" initialisiert wird. Der Aufrufer besitzt die
   einzige Referenz auf das Objekt (d.h., dessen Referenzzähler
   beträgt eins).

   Rufe dies nicht direkt auf, um Speicher für ein Objekt zu
   reservieren; nutze stattdessen den "tp_alloc"-Slot des Typs.

   Beim Befüllen des Slots "tp_alloc" eines Typs ist die Verwendung
   von "PyType_GenericAlloc()" einer benutzerdefinierten Funktion
   vorzuziehen, die dieses Makro lediglich aufruft.

   Dieses Makro ruft weder "tp_alloc" noch "tp_new" ("__new__()") noch
   "tp_init" ("__init__()") auf.

   Dies kann nicht für Objekte verwendet werden, bei denen unter
   "tp_flags" die Option „ "Py_TPFLAGS_HAVE_GC" “ aktiviert ist;
   verwenden Sie stattdessen "PyObject_GC_New".

   Der durch dieses Makro zugewiesene Speicher muss mit `
   "PyObject_Free()" ` freigegeben werden (in der Regel über den Slot
   ` "tp_free" ` des Objekts aufgerufen).

   Bemerkung:

     Es kann nicht garantiert werden, dass der zurückgegebene
     Speicherbereich vor der Initialisierung vollständig auf Null
     gesetzt wurde.

   Bemerkung:

     Dieses Makro erstellt kein vollständig initialisiertes Objekt des
     angegebenen Typs; es reserviert lediglich Speicher und bereitet
     diesen für die weitere Initialisierung durch "tp_init" vor. Um
     ein vollständig initialisiertes Objekt zu erstellen, rufen Sie
     stattdessen *typeobj* auf. Beispiel:

        PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);

   Siehe auch:

     * "PyObject_Free()"

     * "PyObject_GC_New"

     * "PyType_GenericAlloc()"

     * "tp_alloc"

PyObject_NewVar(TYPE, typeobj, size)

   Ähnlich wie „ "PyObject_New" “, nur dass:

   * Es reserviert ausreichend Speicherplatz für die Struktur *TYPE*
     sowie für *size* ("Py_ssize_t") Felder mit der Größe, die durch
     das Feld „ "tp_itemsize" “ von *typeobj* angegeben wird.

   * Der Speicher wird wie folgt initialisiert: "PyObject_InitVar()".

   Dies ist nützlich für die Implementierung von Objekten wie Tupeln,
   deren Größe bereits bei der Erstellung bestimmt werden kann. Durch
   die Einbettung des Feldarrays in denselben Speicherbereich wird die
   Anzahl der Speicherzuweisungen reduziert, was die Effizienz der
   Speicherverwaltung verbessert.

   Rufe dies nicht direkt auf, um Speicher für ein Objekt zu
   reservieren; nutze stattdessen den "tp_alloc"-Slot des Typs.

   Beim Befüllen des Slots "tp_alloc" eines Typs ist die Verwendung
   von "PyType_GenericAlloc()" einer benutzerdefinierten Funktion
   vorzuziehen, die dieses Makro lediglich aufruft.

   Dies kann nicht für Objekte verwendet werden, bei denen unter
   "tp_flags" die Option „ "Py_TPFLAGS_HAVE_GC" “ aktiviert ist;
   verwenden Sie stattdessen "PyObject_GC_NewVar".

   Der von dieser Funktion zugewiesene Speicher muss mit `
   "PyObject_Free()" ` freigegeben werden (in der Regel über den Slot
   ` "tp_free" ` des Objekts aufgerufen).

   Bemerkung:

     Es kann nicht garantiert werden, dass der zurückgegebene
     Speicherbereich vor der Initialisierung vollständig auf Null
     gesetzt wurde.

   Bemerkung:

     Dieses Makro erstellt kein vollständig initialisiertes Objekt des
     angegebenen Typs; es reserviert lediglich Speicher und bereitet
     diesen für die weitere Initialisierung durch "tp_init" vor. Um
     ein vollständig initialisiertes Objekt zu erstellen, rufen Sie
     stattdessen *typeobj* auf. Beispiel:

        PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);

   Siehe auch:

     * "PyObject_Free()"

     * "PyObject_GC_NewVar"

     * "PyType_GenericAlloc()"

     * "tp_alloc"

PyObject _Py_NoneStruct

   Objekt, das in Python als „ "None" “ sichtbar ist. Der Zugriff
   darauf sollte ausschließlich über das Makro „ "Py_None" “ erfolgen,
   das einen Zeiger auf dieses Objekt zurückgibt.

Siehe auch:

  Module Objects
     Erweiterungsmodule zuweisen und erstellen.


Aliase, die nur noch als „Soft-Deprecated“ gelten
=================================================

Sanft abgekündigt <Soft deprecated> seit Version 3.10.

Dies sind Aliase für bereits vorhandene Funktionen und Makros. Sie
dienen ausschließlich der Abwärtskompatibilität.

+----------------------------------------------------+----------------------------------------------------+
| Alias, der nur noch eingeschränkt unterstützt wird | Funktion                                           |
|====================================================|====================================================|
| PyObject_NEW(type, typeobj)                        | "PyObject_New"                                     |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_NEW_VAR(type, typeobj, n)                 | "PyObject_NewVar"                                  |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_INIT(op, typeobj)                         | "PyObject_Init()"                                  |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_INIT_VAR(op, typeobj, n)                  | "PyObject_InitVar()"                               |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_MALLOC(n)                                 | "PyObject_Malloc()"                                |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_REALLOC(p, n)                             | "PyObject_Realloc()"                               |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_FREE(p)                                   | "PyObject_Free()"                                  |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_DEL(p)                                    | "PyObject_Free()"                                  |
+----------------------------------------------------+----------------------------------------------------+
| PyObject_Del(p)                                    | "PyObject_Free()"                                  |
+----------------------------------------------------+----------------------------------------------------+
