Почему бы просто не сравнить его?
>>> def sha1(s):
... return hashlib.sha1(s).hexdigest()
...
>>> def sha512(s):
... return hashlib.sha512(s).hexdigest()
...
>>> t1 = timeit.Timer("sha1('asdf' * 100)", "from __main__ import sha1")
>>> t512 = timeit.Timer("sha512('asdf' * 100)", "from __main__ import sha512")
>>> t1.timeit()
3.2463729381561279
>>> t512.timeit()
6.5079669952392578
Итак, на моей машине hash512
в два раза медленнее, чем sha1
. Но, как сказал GregS , зачем вам использовать безопасный хеш для кэширования? Попробуйте встроенные алгоритмы хеширования, которые должны быть очень быстрыми и настроенными:
>>> s = "asdf"
>>> hash(s)
-618826466
>>> s = "xxx"
>>> hash(s)
943435
>>> hash("xxx")
943435
Или, что еще лучше, используйте встроенные словари Python. Может быть, вы можете рассказать нам больше о том, что вы планируете кэшировать.
EDIT:
Я думаю, что вы пытаетесь достичь чего-то вроде этого:
hash = hashlib.sha1(object_to_cache_as_string).hexdigest()
cache[hash] = object_to_cache
Что я имел в виду, «используя встроенные словари Python», так это то, что вы можете упростить вышесказанное:
cache[object_to_cache_as_string] = object_to_cache
Таким образом, Python заботится о хешировании, поэтому вам не нужно!
Что касается вашей конкретной проблемы, вы можете обратиться к Python hashable dicts , чтобы сделать словарь хэшируемым. Затем все, что вам нужно сделать для кэширования объекта:
cache[object_to_cache] = object_to_cache