Eventuali duplicati:
What does python intern do, and when should it be used?Come faccio a far eseguire a Python tutte le stringhe identiche usando la stessa memoria?
sto lavorando con un programma in python che deve correlare su un array con milioni di oggetti stringa. Ho scoperto che se provengono tutti dalla stessa stringa quotata, ogni "stringa" aggiuntiva è solo un riferimento alla prima stringa principale. Tuttavia se le stringhe vengono lette da un file e se le stringhe sono tutte uguali, ognuna richiede ancora una nuova allocazione di memoria.
Cioè, questo richiede circa 14meg di stoccaggio:
a = ["foo" for a in range(0,1000000)]
Anche se questo richiede più di 65meg di stoccaggio:
a = ["foo".replace("o","1") for a in range(0,1000000)]
ora posso fare il ricordo prende molto meno spazio con questo:
s = {"f11":"f11"}
a = [s["foo".replace("o","1")] for a in range(0,1000000)]
Ma sembra sciocco. C'è un modo più semplice per farlo?
@Maulwurfn, solo perché la risposta è la stessa non significa che la domanda sia la stessa. –
perché non memorizzi prima il valore dell'operazione 'replace'? – JBernardo
Come stai misurando la dimensione degli elenchi? Se uso 'sys.getsizeof ([" foo "per a in range (0,1000000)])) ottengo le stesse dimensioni di' sys.getsizeof (["foo" .replace ("o", "1") per a in range (0,1000000)])) - almeno in Python 3.2 –