Sí, el dict se almacenará en la memoria de proceso. Entonces, si se vuelve lo suficientemente grande como para que no haya suficiente espacio en la RAM del sistema, entonces puede esperar ver una desaceleración masiva a medida que el sistema comienza a intercambiar memoria hacia y desde el disco.
Otros han dicho que unos pocos millones de artículos no deberían ser un problema; No estoy muy seguro. La sobrecarga dict misma (antes de contar la memoria tomada por las claves y valores) es significativa. Para Python 2.6 o posterior, sys.getsizeof brinda información útil acerca de la cantidad de RAM que ocupan varias estructuras de Python. Algunos resultados rápidos, de Python 2.6 en una máquina OS X de 64 bits:
>>> from sys import getsizeof
>>> getsizeof(dict((n, 0) for n in range(5462)))/5462.
144.03368729403149
>>> getsizeof(dict((n, 0) for n in range(5461)))/5461.
36.053470060428495
Así la sobrecarga dict varía entre 36 bytes por artículo y 144 bytes por artículo en esta máquina (el valor exacto en función de cómo completo el la tabla hash interna del diccionario es: aquí 5461 = 2 ** 14 // 3 es uno de los umbrales donde la tabla hash interna está ampliada).Y eso es antes de agregar la sobrecarga para los ítems dict mismos; si todas son cadenas cortas (digamos, 6 caracteres o menos), eso aún agrega otro> = 80 bytes por elemento (posiblemente menos si muchas claves diferentes comparten el mismo valor).
Así que no necesitaría que muchos millones de elementos dict para extraer RAM en una máquina típica.
gracias, aprendí sobre getsizeof de esto. Prácticamente solo trataré con ~ 15k valores como máximo, y la velocidad es esencial. Estoy usando un dict simplemente porque no he tocado las bases de datos, ¿pero supongo que un DB que lea y escriba desde un disco duro sería más lento que leer/escribir en un dict? – PPTim
Está bien, por un tamaño de ese tipo no deberías tener ningún problema. ¿Cuáles son los tipos de claves y valores? ¿Instrumentos de cuerda? –
en su mayoría carrozas, algunas cuerdas, algunas listas – PPTim