Bagaimana variabel dan memori dikelola dengan Python.
Secara otomatis! Tidak, sungguh, Anda hanya membuat sebuah objek dan Mesin Virtual Python menangani memori yang dibutuhkan dan di mana ia akan ditempatkan di tata letak memori.
Apakah itu memiliki tumpukan dan tumpukan dan algoritma apa yang digunakan untuk mengelola memori?
Ketika kita berbicara tentang CPython
itu menggunakan tumpukan pribadi untuk menyimpan objek. Dari dokumentasi CPython C API :
Manajemen memori di Python melibatkan heap pribadi yang berisi semua objek dan struktur data Python. Pengelolaan tumpukan pribadi ini dipastikan secara internal oleh pengelola memori Python. Manajer memori Python memiliki komponen berbeda yang menangani berbagai aspek manajemen penyimpanan dinamis, seperti berbagi, segmentasi, pra-alokasi, atau caching.
Reklamasi memori sebagian besar ditangani dengan penghitungan referensi . Artinya, VM Python menyimpan jurnal internal tentang berapa banyak referensi yang merujuk ke suatu objek, dan secara otomatis mengumpulkan sampah ketika tidak ada lagi referensi yang merujuk padanya. Selain itu, ada mekanisme untuk memutus referensi melingkar (yang tidak dapat ditangani oleh penghitungan referensi) dengan mendeteksi "pulau" objek yang tidak dapat dijangkau, agak kebalikan dari algoritme GC tradisional yang mencoba menemukan semua objek yang dapat dijangkau.
CATATAN: Harap diingat bahwa informasi iniCPython
spesifik. Implementasi lain python, sepertipypy
,iron python
,jython
dan lain-lain mungkin berbeda satu sama lain dan dari CPython ketika datang ke spesifik pelaksanaannya. Untuk memahami itu dengan lebih baik, mungkin membantu untuk memahami bahwa ada perbedaan antara Python semantik (bahasa) dan implementasi yang mendasarinya
Berdasarkan pengetahuan ini, adakah rekomendasi tentang manajemen memori untuk pemrosesan data / jumlah besar?
Sekarang saya tidak dapat berbicara tentang ini, tetapi saya yakin bahwa NumPy (pustaka python paling populer untuk pengolah angka) memiliki mekanisme yang menangani konsumsi memori dengan baik.
Jika Anda ingin tahu lebih banyak tentang Internal Python, lihat sumber daya ini: