Yazdığım program, sözlüklerde çok miktarda veri saklar. Spesifik olarak, her biri 15 yüzdeli, 1500 float içeren bir sınıfın 1588 örneğini oluşturuyorum. Bu işlem dizüstü bilgisayarımdaki 2GB'lık belleği oldukça hızlı bir şekilde kullanıyor (sınıfın 1000'inci örneğinde takas yazmaya başladım).Python bellek kullanımı: Nesnemden hangisi en fazla belleği alıyor?
Benim sorum şu, hangisi belleklerimi kullanıyor?
- 34 milyon bazı çift yüzer?
- 22.500'ün üstü sözlükten mi geliyorsunuz?
- 1500 sınıfının tepesi?
Bana göre, bellek domuzunun bellekte tuttuğum çok sayıda kayan nokta sayısı olması gerekir. Ancak, şu ana kadar okuduğum doğru ise, her bir kayan nokta sayım 16 bayt alır. 34 milyon çiftim olduğu için, bu sadece bir gigabaytın üzerinde olması gereken yaklaşık 108 milyon bayt olmalıdır.
Burada dikkate almadığım bir şey var mı?
Yukarıdaki kodda 1500 yerine aralık (1000) veya aralık (1250) eklerseniz, 24712 bayt boyut alırım. Bu, boyutun (1365) bu noktaya kadar, boyutta ihtiyatlı bir sıçrama olduğunu görünce doğrudur. Python'un belleği nasıl ayırdığı doğru mu? Eğer öyleyse, neden bu durumda? – Wilduck
Ben bir Python şamandıranı, genellikle 64-bit (8 byte) olacak bir C çiftini kullanarak uygulanmıştı. Ve çift tip 'struct' modülünde 8 bayt alır. 'Getsizeof' sonucunu tartışamam ... –
@Scott, her Python nesnesinin "yükü" ne ek olarak bir miktar yükü (referans sayacı, türüne işaretçi) vardır ve tüm ayırmalar yuvarlanır sistem malloc ile birlikte iyi çalmak için 16 bayttan çoğuna kadar. Şamandıraları kompakt bir şekilde tutmak için, bunlardan bir 'array.array' kullanabilirsiniz (ama bu liste benzeri, dict-like değil). –