Duplicar posible:
What does python intern do, and when should it be used?¿Cómo hago que Python haga que todas las cadenas idénticas usen la misma memoria?
estoy trabajando con un programa en Python que tiene para correlacionar en una matriz con millones de objetos de cadena. Descubrí que si todos provienen de la misma cadena citada, cada "cadena" adicional es solo una referencia a la primera cadena maestra. Sin embargo, si las cadenas se leen desde un archivo, y si las cadenas son todas iguales, cada una de ellas requiere una nueva asignación de memoria.
Es decir, esto tiene sobre 14meg de almacenamiento:
a = ["foo" for a in range(0,1000000)]
Si bien esto requiere más que 65meg de almacenamiento:
a = ["foo".replace("o","1") for a in range(0,1000000)]
Ahora puede hacer que la memoria se necesita mucho menos espacio con esto:
s = {"f11":"f11"}
a = [s["foo".replace("o","1")] for a in range(0,1000000)]
Pero eso parece una tontería. ¿Hay alguna forma más fácil de hacer esto?
@Maulwurfn, el hecho de que la respuesta sea la misma no significa que la pregunta sea la misma. –
¿por qué no almacena el valor de la operación 'replace' primero? – JBernardo
¿Cómo se mide el tamaño de las listas? Si uso 'sys.getsizeof ([" foo "para un rango (0,1000000)])' obtengo el mismo tamaño que 'sys.getsizeof ([" foo ".replace (" o "," 1 ") para un rango (0,1000000)]) '- al menos en Python 3.2 –