Sono stato sorpreso dal fatto che sys.getsizeof(10000*[x])
è 40036 indipendentemente da x: 0, "a", 1000 * "a", {}.
Esiste uno deep_getsizeof
che considera correttamente gli elementi che condividono la memoria?
(La domanda veniva da guardando le tabelle del database in memoria come gamma (1000000) -> nomi di provincia: elenco o dict?)
(Python 2.6.4 è su un ppc mac.)Python fornisce una lista completa di contenuti?
Aggiunto: 10000 * ["Mississippi"] è 10000 puntatori a un "Mississippi", come hanno sottolineato diverse persone. Prova questo:
nstates = [AlabamatoWyoming() for j in xrange(N)]
dove AlabamatoWyoming() -> una stringa "Alabama" .. "Wyoming". Cosa sono deep_getsizeof (nstates)?
(Come possiamo dire
- una corretta deep_getsizeof:? Difficile, ~ tracciante gc
- stima dal totale vm
- all'interno la conoscenza della realizzazione di pitone
- indovinare
. Aggiunto 25jan: vedi anche when-does-python-allocate-new-memory-for-identical-strings
Grazie Pär, ci proverò; mostra quanto sia difficile il problema. Qualcuno dei tuoi colleghi ha una breve nota sul salvataggio della memoria in Python, che risponderebbe ad es. range (1000000) -> province name: lista o dict? – denis
link morto lì – MohamedEzz