# Allocating objects on the heap

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. Part of the Stable ABI.

  Menginisialisasi objek op yang baru dialokasikan dengan tipe dan referensi awalnya. Mengembalikan objek yang telah diinisialisasi. Bidang lain dari objek tidak diinisialisasi. Terlepas dari namanya, fungsi ini tidak terkait dengan metode `__init__()` objek (slot:c:member:~PyTypeObject.tp_init ). Secara khusus, fungsi ini tidak tidak memanggil metode `__init__()` objek.

  Secara umum, anggaplah fungsi ini sebagai rutinitas tingkat rendah. Gunakan `tp_alloc` jika memungkinkan. Untuk mengimplementasikan `tp_alloc` untuk tipe Anda, pilih `PyType_GenericAlloc()` atau `PyObject_New()`.

  Catatan

  Fungsi ini hanya menginisialisasi memori objek yang sesuai dengan struktur awal `PyObject`. Fungsi ini tidak mengosongkan sisanya.

PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)
  Return value: Borrowed reference. Part of the Stable ABI.

  Ini melakukan segalanya `PyObject_Init()`, dan juga menginisialiasi panjang informasi pada sebuah ukuran object variabel.

  Catatan

  Fungsi ini hanya menginisialisasi sebagian memori objek. Fungsi ini tidak mengosongkan sisanya.

PyObject_New(TYPE, typeobj)

  Mengalokasikan objek Python baru menggunakan tipe struktur C TYPE dan objek tipe Python typeobj (`PyTypeObject*`) dengan memanggil `PyObject_Malloc()` untuk mengalokasikan memori dan menginisialisasinya sebagai `PyObject_Init()`. Pemanggil akan memiliki satu-satunya referensi ke objek tersebut (misal: jumlah referensinya adalah satu).

  Hindari memanggil ini secara langsung untuk mengalokasikan memori untuk sebuah objek; panggil slot `tp_alloc` dari tipe sebagai gantinya.

  Ketika mengisi slot tipe `tp_alloc` , `PyType_GenericAlloc()` lebih direkomendasikan daripada fungsi kustom yang hanya memanggil makro ini.

  Makro ini tidak memanggil `tp_alloc`, `tp_new` (`__new__()`), atau `tp_init` (`__init__()`).

  Ini tidak dapat digunakan untuk objek dengan `Py_TPFLAGS_HAVE_GC` yang diatur di `tp_flags`; gunakan `PyObject_GC_New` sebagai gantinya.

  Memori yang dialokasikan oleh makro ini harus dibebaskan dengan `PyObject_Free()` (biasanya dipanggil melalui slot objek `tp_free` ).

  Catatan

  Memori yang dikembalikan tidak dijamin telah di-nol-kan sepenuhnya sebelum diinisialisasi.

  Catatan

  Makro ini tidak membuat objek yang diinisialisasi penuh dari tipe yang diberikan; makro ini hanya mengalokasikan memori dan mempersiapkannya untuk inisialisasi lebih lanjut oleh `tp_init`. Untuk membuat objek yang diinisialisasi secara penuh, panggil typeobj sebagai gantinya. Sebagai contoh:

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

  Lihat juga

  - `PyObject_Free()`

  - `PyObject_GC_New`

  - `PyType_GenericAlloc()`

  - `tp_alloc`

PyObject_NewVar(TYPE, typeobj, size)

  Seperti `PyObject_New` kecuali:

  - Ini mengalokasikan cukup memori untuk struktur TYPE ditambah bidang size (`Py_ssize_t`) dengan ukuran yang diberikan oleh bidang `tp_itemsize` dari typeobj.

  - Memori diinisialisasi seperti `PyObject_InitVar()`.

  Hal ini berguna untuk mengimplementasikan objek seperti tuple, yang dapat menentukan ukurannya pada saat konstruksi. Menanamkan array of fields ke dalam alokasi yang sama akan mengurangi jumlah alokasi, sehingga meningkatkan efisiensi manajemen memori.

  Hindari memanggil ini secara langsung untuk mengalokasikan memori untuk sebuah objek; panggil slot `tp_alloc` dari tipe sebagai gantinya.

  Ketika mengisi slot tipe `tp_alloc` , `PyType_GenericAlloc()` lebih direkomendasikan daripada fungsi kustom yang hanya memanggil makro ini.

  Ini tidak dapat digunakan untuk objek dengan `Py_TPFLAGS_HAVE_GC` yang diatur di `tp_flags`; gunakan `PyObject_GC_NewVar` sebagai gantinya.

  Memori yang dialokasikan oleh fungsi ini harus dibebaskan dengan `PyObject_Free()` (biasanya dipanggil melalui slot `tp_free` objek).

  Catatan

  Memori yang dikembalikan tidak dijamin telah di-nol-kan sepenuhnya sebelum diinisialisasi.

  Catatan

  Makro ini tidak membuat objek yang diinisialisasi penuh dari tipe yang diberikan; makro ini hanya mengalokasikan memori dan mempersiapkannya untuk inisialisasi lebih lanjut oleh `tp_init`. Untuk membuat objek yang diinisialisasi secara penuh, panggil typeobj sebagai gantinya. Sebagai contoh:

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

  Lihat juga

  - `PyObject_Free()`

  - `PyObject_GC_NewVar`

  - `PyType_GenericAlloc()`

  - `tp_alloc`

PyObject _Py_NoneStruct

  Object yang terlihat di Python sebagai `None`. Ini seharusnya hanya dapat diakses menggunakan makro `Py_None`, yang mengevaluasi ke sebuah pointer ke object ini.

Lihat juga

Module Objects

  Untuk mengalokasikan dan membuat modul ekstensi.

## Soft-deprecated aliases

Soft deprecated since version 3.15.

These are aliases to existing functions and macros. They exist solely for backwards compatibility.

Soft-deprecated alias | Fungsi
--- | ---
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()`