Windows XP, Python 2.5:
hash('http://stackoverflow.com') Result: 1934711907
Механизм приложения Google (http://shell.appspot.com/):
hash('http://stackoverflow.com') Result: -5768830964305142685
Почему это? Как у меня может быть хеш-функция, которая даст мне те же результаты через различные платформы (Windows, Linux, Mac)?
Использовать hashlib в качестве hash ()
предназначен для использования в :
быстро сравнивать ключи словаря во время поиска в словаре
и, следовательно, не гарантирует, что оно будет одинаковым во всех реализациях Python.
Как указано в документации, встроенная функция hash () - это , а не , предназначенная для хранения полученных хэшей где-то снаружи. Он используется для предоставления хеш-значения объекта, хранения его в словарях и т. Д. Это также зависит от реализации (GAE использует модифицированную версию Python). Посмотрите:
>>> class Foo:
... pass
...
>>> a = Foo()
>>> b = Foo()
>>> hash(a), hash(b)
(-1210747828, -1210747892)
Как вы можете видеть, они разные, поскольку hash () использует метод объекта __ hash __
вместо «обычных» алгоритмов хеширования, таких как SHA.
Учитывая вышеизложенное, рациональное выбор - использовать модуль hashlib .
Вероятно, он просто запрашивает функцию, предоставленную операционной системой, а не собственный алгоритм.
Как написано в других комментариях, используйте hashlib или напишите свою собственную хеш-функцию.