There may sean nombres razonables para ellos que simplemente producen nombres cuyos hashes no están en conflicto. Sin embargo, los dictos de CPython ya son una de las estructuras de datos más optimizadas en el universo conocido, producen pocas colisiones para la mayoría de las entradas, funcionan bien con los esquemas hash de otros tipos integrados, resuelven choques muy rápido, etc. Es extremadamente poco probable que ' Veremos cualquier beneficio, incluso si ha encontrado algo, especialmente dado que cientos de búsquedas no son realmente tantas.
Tomemos, por ejemplo, esta referencia timeit ejecuta en mi máquina de escritorio 4 años de edad (luciendo un laughablely de bajo presupuesto de la CPU de doble núcleo con 3,1 GHz):
...>python -mtimeit --setup="d = {chr(i)*100: i for i in range(15)};\
k = chr(7)*100" "d[k]"
1000000 loops, best of 3: 0.222 usec per loop
Y esas cadenas son una docena de veces más grande que todo lo que es remotamente sensible para escribir manualmente como un nombre de variable. Reducir la longitud de 100 a 10 conduce a 0.0778 microsegundos por búsqueda. Ahora mida la velocidad de carga de su página y compárelos (alternativamente, solo reflexione sobre cuánto tiempo llevará el trabajo que está haciendo realmente al construir la página); y tenga en cuenta el almacenamiento en caché, la sobrecarga del marco y todas estas cosas.
Nada de lo que haga en este sentido puede marcar la diferencia en términos de rendimiento, punto y punto.
Si se puede conformar con claves enteras - que será más rápido que las cuerdas. (De ser así, probablemente solo puedas usar una lista.) –
@Sven Marnach, ¿es así? ¿La función hash requiere un entero más rápido que una cadena? Si es así, esa es información interesante, ¿tienes una referencia? – juanchopanza
@juanchopanza: enteros hash a sí mismos (al menos aquellos en el rango del tipo entero utilizado para los valores hash). Las cadenas tendrán que repetirse al menos una vez. – delnan