Mengalokasikan objek kedalam struktur data (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 mengimplementasikantp_alloc
untuk tipe Anda, pilihPyType_GenericAlloc()
atauPyObject_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 segala hal yang dilakukan
PyObject_Init()
, dan juga menginisialiasi rentang informasi untuk objek variabel yang terikat ukuran.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 memanggilPyObject_Malloc()
untuk mengalokasikan memori dan menginisialisasinya sebagaiPyObject_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__()
), atautp_init
(__init__()
).Ini tidak dapat digunakan untuk objek dengan
Py_TPFLAGS_HAVE_GC
yang diatur ditp_flags
; gunakanPyObject_GC_New
sebagai gantinya.Memori yang dialokasikan oleh makro ini harus dibebaskan dengan
PyObject_Free()
(biasanya dipanggil melalui slot objektp_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);
-
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 bidangtp_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 ditp_flags
; gunakanPyObject_GC_NewVar
sebagai gantinya.Memori yang dialokasikan oleh fungsi ini harus dibebaskan dengan
PyObject_Free()
(biasanya dipanggil melalui slottp_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);
-
void PyObject_Del(void *op)¶
Sama seperti
PyObject_Free()
.
-
PyObject _Py_NoneStruct¶
Objek yang terlihat di Python sebagai
None
. Ini hanya boleh diakses menggunakan makroPy_None
, yang dievaluasi menjadi penunjuk ke objek ini.
Lihat juga
- Module Objects
Untuk mengalokasikan dan membuat modul ekstensi.