Bellek ağacında saklanan bazı verilerim var ve ben ağacı düzenli olarak turşu kullanarak diske depolarım. Geçtiğimiz günlerde, programın büyük bir bellek kullandığını farkettim, sonra kaydedilen turşu dosyasını kontrol ettim, bu yaklaşık 600 milyon civarındadır, sonra ağacın belleğe geri yüklendiği başka bir küçük test programı yazdım ve bunun yaklaşık 10 kat bellek alacağını anladım. (5G) diskteki boyuttan daha mı normal? Bundan kaçınmanın en iyi yolu nedir?turşu ve python veri yapısı
1
A
cevap
2
Hayır, normal değil. Ağacının sandığından daha büyük olduğunu sanıyorum. Yürümek için tüm kodu yazın ve kullanılan tüm alanı ekleyin (ve düğümleri sayın).
memory size of Python data structure Ayrıca tam olarak ne soran görüyor musunuz? Diskteki 600M veri yapısının bellekte 5G olduğunu şaşırdınız mı? Bu özellikle şaşırtıcı değil. Pickle verileri sıkıştırır, böylece diskte daha küçük olmasını beklersiniz. Oldukça iyi olan 10 (kaba) bir faktöre göre daha küçüktür.
Kendi verilerinizin büyüklüğüne şaşkınlık duyuyorsanız, başka bir şeydir.
Dosyanın disk üzerinde 600M olduğunu ancak belleğe yüklenmesinin 5G sürdüğüne şaşırdım, turşu bunu sıkıştıracağınızı söylediniz, bu mantıklı. Ama başka bir soru ortaya çıkarır, ağaç temelde url (string) için kullanılan bir önek ağacıdır (trie), doğrudan tüm URL'leri diskte saklamaktan daha büyük olmamalıdır, değil mi? Sıkıştırıldıktan sonra, yalnızca daha küçük olabilir, Ama bazen ağaç, url list dosyasından daha büyüktür (ağacın içinde başka şeyler saklamıyorum). – 1a1a11a
BTW, cevabınız için teşekkür ederiz, ayrıca bağlantı çok faydalıdır. – 1a1a11a
Ağaçlar, listelerini depolamaktan (biraz) daha fazla yer alır. Ağaçlar, sadece bir liste saklarsanız sakladığınız bilgilerin yanı sıra tüm ağaç yapısı bilgilerine sahip olmalıdır. Ağaçlar ve diğer veri yapıları uzay ticaretine karşı bir zamanı temsil eder. Zaman harcayarak ya da tam tersi alandan tasarruf edebilirsiniz (verileri saklamak ya da geri almak için zaman kazanabilirsiniz). Daha büyük bir miktar olmamalı. –