En este caso, debido a que las cadenas son bastante cortas, y hay tantas, puede guardar un poco de memoria usando intern
en las cadenas. Suponiendo que solo hay letras minúsculas en las cuerdas, son 26 * 26 = 676 posibles cuerdas, por lo que debe haber muchas repeticiones en esta lista; intern
se asegurará de que esas repeticiones no den como resultado objetos únicos, sino que todas se refieran al mismo objeto base.
Es posible que Python ya sea interno de cuerdas cortas; pero mirando varias fuentes diferentes, parece que esto depende mucho de la implementación. Entonces, llamar al intern
en este caso es probablemente el camino a seguir; YMMV.
como una elaboración sobre por qué esto es muy probable que ahorrar memoria, tenga en cuenta lo siguiente:
>>> sys.getsizeof('')
40
>>> sys.getsizeof('a')
41
>>> sys.getsizeof('ab')
42
>>> sys.getsizeof('abc')
43
agregar caracteres individuales de una cadena añade solamente un byte en el tamaño de la propia cadena, pero cada string ocupa 40 bytes por sí mismo.
Ahora aprendí que python, en general, consume bastante memoria. Como señala correctamente, la longitud de las cadenas no es el problema aquí, sino el tamaño mínimo de los objetos. Me sorprendió un poco descubrir también que el tamaño de un int simple es de 24 bytes (en el sistema de 64 bits). Es bueno saber ... –