Menor hash em python para nomear arquivos de cache

Qual é o hash mais curto (em formato utilizável por nome de arquivo, como um hexdigest) disponível em python? Meu aplicativo quer salvararquivos de cache para alguns objetos. Os objetos devem ter repr () únicos, então eles são usados ​​para 'semear' o nome do arquivo. Eu quero produzir um nome de arquivo possivelmente único para cada objeto (não muitos). Eles não devem colidir, mas se eles usarem, meu aplicativo simplesmente não terá cache para esse objeto (e terá que reindexar os dados desse objeto, um custo menor para o aplicativo).

Assim, se houver uma colisão, perdemos um arquivo de cache, mas é a economia coletada do armazenamento em cache que todos os objetos tornam a inicialização do aplicativo muito mais rápida, por isso não importa muito.

Agora eu estou realmente usando abs (hash (repr (obj))); isso mesmo, o string hash! Ainda não encontrei nenhuma colisão, mas gostaria de ter uma melhor função de hash. O hashlib.md5 está disponível na biblioteca python, mas o hexdigest é realmente longo se for colocado em um nome de arquivo. Alternativas, com razoável resistência à colisão?

Edit: Caso de uso é assim: O carregador de dados obtém uma nova instância de um objeto de transporte de dados. Tipos exclusivos têm repr. por isso, se um arquivo de cache parahash(repr(obj)) existe, eu descompactar esse arquivo de cache e substituir obj com o objeto unpallled. Se houve uma colisão e o cache foi uma correspondência falsa, percebi. Portanto, se não tivermos cache ou tivermos uma correspondência falsa, eu inicio o obj (recarregando seus dados).

Conclusões (?)

ostr hash em python pode ser bom o suficiente, eu só estava preocupado com a sua resistência à colisão. Mas se eu puder enrolar2**16 objetos com isso, vai ser mais do que suficiente.

Eu descobri como pegar um hash hexadecimal (de qualquer fonte de hash) e armazená-lo compactamente com 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("=")

questionAnswers(8)

yourAnswerToTheQuestion