Estoy escribiendo una aplicación en Python (2.6) que requiere que use un diccionario como almacén de datos.Eficiencia de memoria: ¿un diccionario grande o un diccionario de diccionarios más pequeños?
Tengo curiosidad acerca de si es o no más eficiente con la memoria tener un diccionario grande, o dividirlo en muchos diccionarios (mucho) más pequeños, luego tener un diccionario "índice" que contiene una referencia a todos los diccionarios más pequeños.
Sé que hay un montón de sobrecarga en general con listas y diccionarios. Leí en algún lugar que Python internamente asigna suficiente espacio que el diccionario/lista de elementos a la potencia de 2.
Soy lo suficientemente nuevo para python que no estoy seguro si hay otras complicaciones/sorpresas internas inesperadas como eso, eso no es evidente para el usuario promedio que debería tener en cuenta.
Una de las dificultades es saber cómo el poder del sistema 2 cuenta "elementos". ¿Cada tecla: par se cuenta como 1 artículo? Parece importante saberlo porque si tienes un diccionario monolítico de 100 elementos, se asignarán 100^2 ítems. Si tiene 100 diccionarios de elementos individuales (1 clave: par), entonces cada diccionario solo tendrá una asignación de 1^2 (también conocido como asignación no adicional).
¡Cualquier información claramente presentada sería muy útil!
Actualización: entiendo que es la misma cantidad de datos reales en ambos sentidos. Pero esto es más una cuestión de mecánica interna pitones. ¿Hay alguna manera de jugar con su sistema de asignación para hacer que un método sea más eficiente que el otro? –
¿Por qué está tomando esta decisión? ¿Has probado un gran diccionario? ¿Te has quedado sin memoria? ¿Es muy lento? Hasta que algo se rompa (es decir, no funcione), esto suena como una optimización prematura. –
Estoy seguro de que es un poco prematuro de qué preocuparse. Pero espero que haya una forma generalmente reconocida como "la más eficiente" y quería comenzar con la forma generalmente reconocida, así que no tengo que hacer una reescritura mayor si no es eficiente para mis necesidades. –