Hash más corto en python para nombrar archivos de caché

¿Cuál es el hash más corto (en forma de nombre de archivo, como un hexdigest) disponible en python? Mi aplicación quiere guardararchivos de caché para algunos objetos. Los objetos deben tener repr () único para que se utilicen para "inicializar" el nombre de archivo. Quiero producir un nombre de archivo posiblemente único para cada objeto (no tantos). No deben chocar, pero si lo hacen, mi aplicación simplemente carecerá de caché para ese objeto (y tendrá que volver a indexar los datos de ese objeto, un costo menor para la aplicación).

Por lo tanto, si hay una colisión, perdemos un archivo de caché, pero los ahorros acumulados al almacenar en caché todos los objetos hacen que la aplicación se inicie mucho más rápido, por lo que no importa mucho.

Ahora mismo estoy usando abs (hash (repr (obj))); así es, la cadena de hash! Todavía no he encontrado ninguna colisión, pero me gustaría tener una mejor función de hash. hashlib.md5 está disponible en la biblioteca de python, pero el hexdigest es realmente largo si se coloca en un nombre de archivo. ¿Alternativas, con razonable resistencia a la colisión?

Edición: el caso de uso es así: el cargador de datos obtiene una nueva instancia de un objeto portador de datos. Tipos únicos tienen reproducción única. así que si un archivo de cachéhash(repr(obj)) existe, desalojo ese archivo de caché y reemplazo obj con el objeto no seleccionado. Si hubo una colisión y el caché era una coincidencia falsa, me doy cuenta. Entonces, si no tenemos caché o no tenemos una coincidencia falsa, en su lugar, inicio obj (recargando sus datos).

Conclusiones (?)

losstr el hash en python puede ser lo suficientemente bueno, solo estaba preocupado por su resistencia a la colisión. Pero si puedo hash2**16 Objetos con él, va a ser más que suficiente.

Descubrí cómo tomar un hash hexadecimal (de cualquier fuente de hash) y almacenarlo de forma compacta con base64:

# 'h' is a string of hex digits 
bytes = "".join(chr(int(h[i:i+2], 16)) for i in xrange(0, len(h), 2))
hashstr = base64.urlsafe_b64encode(bytes).rstrip("=")

Respuestas a la pregunta(8)

Su respuesta a la pregunta