Memory Management Python
Salah satu alasan Python begitu populer adalah karena pengembang tidak perlu memusingkan manajemen memori secara manual seperti di C atau C++. Python menangani alokasi dan dealokasi memori secara otomatis.
Namun, memahami bagaimana Python mengelola memori di balik layar sangat penting untuk menulis kode yang efisien, terutama saat menangani data dalam jumlah besar.
1. Heap dan Stack
Python menggunakan dua jenis memori:
- Stack Memory: Digunakan untuk eksekusi fungsi statis dan variabel lokal.
- Heap Memory: Semua objek dan instance Python (seperti integer, list, class) disimpan di sini. Ini bersifat privat dan dikelola oleh Python Memory Manager.
2. Reference Counting
Strategi utama Python dalam manajemen memori adalah Reference Counting.
Setiap objek di Python memiliki "penghitung referensi" (reference counts). Angka ini menunjukkan berapa banyak variabel yang merujuk ke objek tersebut.
- Saat objek dibuat atau direferensikan (
a = objek), count bertambah (+1). - Saat referensi dihapus (
del a) atau keluar dari scope, count berkurang (-1). - Saat count mencapai 0, memori objek tersebut langsung dibebaskan.
import sys
a = []
# Get ref count (biasanya lebih tinggi dari perkiraan karena argumen sys.getrefcount sendiri juga referensi sementara)
print(sys.getrefcount(a))
b = a
print(sys.getrefcount(a)) # Bertambah
del b
print(sys.getrefcount(a)) # Berkurang
3. Garbage Collection (GC)
Reference counting punya satu kelemahan fatal: Circular References (Referensi Berputar).
a = []
b = []
a.append(b)
b.append(a) # Circular reference
Jika a dan b dihapus, reference count mereka tidak akan pernah jadi 0 karena mereka saling menunjuk. Di sinilah Garbage Collector (GC) berperan.
GC Python adalah mekanisme terpisah yang berjalan secara periodik untuk mendeteksi dan membersihkan "sampah" circular references ini.
Anda bisa mengontrol GC secara manual menggunakan modul gc:
import gc
# Paksa jalankan garbage collection
gc.collect()
# Matikan garbage collection otomatis
gc.disable()
Tips: Jarang sekali Anda perlu menyentuh modul gc kecuali untuk optimasi tingkat tinggi.
4. Tips Menghemat Memori
- Gunakan Generator: Seperti dibahas di tutorial sebelumnya, generator tidak memuat semua data ke RAM.
- Gunakan
__slots__di Class: Jika Anda membuat jutaan instance class kecil,__slots__bisa menghemat RAM secara signifikan dengan menonaktifkan__dict__dinamis per instance.
class HematMemori:
__slots__ = ['nama', 'umur'] # Hanya boleh punya atribut ini
def __init__(self, nama, umur):
self.nama = nama
self.umur = umur
- Hati-hati dengan Global Variables: Objek global tidak akan pernah dihapus sampai program berhenti, kecuali dihapus manual.
Kesimpulan
- Python menggunakan Reference Counting sebagai metode utama.
- Garbage Collector bertugas membersihkan circular references.
- Anda bisa menulis kode Python yang "memory-efficient" dengan memahami cara kerjanya.
Edit tutorial ini
Gabung Komunitas Developer & Kreator Digital
Dapatkan teman coding, sharing project, networking dengan expert, dan update teknologi terbaru.
Selamat! Anda telah sukses mendaftar di newsletter.