Python'da değişkenler ve bellek nasıl yönetilir?
Otomatik olarak! Hayır, gerçekten, sadece bir nesne yaratırsınız ve Python Sanal Makinesi ihtiyaç duyulan belleği ve bellek düzeninde nereye yerleştirileceğini işler.
Bir yığını ve yığını var mı ve belleği yönetmek için hangi algoritma kullanılıyor?
Bahsettiğimiz CPython
zaman, nesneleri depolamak için özel bir yığın kullanır . CPython C API belgelerinden :
Python'da bellek yönetimi, tüm Python nesnelerini ve veri yapılarını içeren özel bir yığın içerir. Bu özel yığının yönetimi dahili olarak Python bellek yöneticisi tarafından sağlanır. Python bellek yöneticisi, paylaşım, bölümleme, ön ayırma veya önbelleğe alma gibi çeşitli dinamik depolama yönetimi yönleriyle ilgilenen farklı bileşenlere sahiptir.
Hafıza ıslahı çoğunlukla referans sayma ile ele alınır . Yani, Python VM bir nesneye kaç referansın başvurduğuna dair dahili bir günlük tutar ve ona atıfta bulunan daha fazla referans olmadığında otomatik olarak çöp toplar. Buna ek olarak, tüm erişilebilir nesneleri bulmaya çalışan geleneksel GC algoritmalarının biraz tersine, nesnelerin erişilemeyen "adalarını" tespit ederek dairesel referansları (referans sayımın idare edemediği) kırmak için bir mekanizma vardır .
NOT: Lütfen bu bilgilerinCPython
özelolduğunu unutmayın. Diğer piton gibi uygulamalar,pypy
,iron python
,jython
onların uygulama özelliklerine gelince ve diğerleri birbirinden ve CPython farklı olabilir. Bunu daha iyi anlamak için, Python anlambilim (dil) ile temeldeki uygulama arasında bir fark olduğunu anlamak yardımcı olabilir.
Bu bilgi göz önüne alındığında, çok sayıda / veri sıkıştırma için bellek yönetimi konusunda herhangi bir öneri var mı?
Şimdi bunun hakkında konuşamam ama eminim ki NumPy'nin (sayı hesaplama için en popüler python kitaplığı) bellek tüketimini zarif bir şekilde ele alan mekanizmalara sahip .
Python'un Internals'ı hakkında daha fazla bilgi edinmek isterseniz, şu kaynaklara bir göz atın: