Большинство ответов предполагают, что это связано с разными платформами, но это еще не все. Из документацииobject.__hash__(self) :
По умолчанию __hash__()значения str, bytesи
datetime объекты «соленые» с непредсказуемым случайным значением. Хотя они остаются постоянными в рамках отдельного процесса Python, их нельзя предсказать между повторными вызовами Python.
Это предназначено для обеспечения защиты от отказа в обслуживании, вызванного тщательно подобранными входами, которые используют наихудшую производительность вставки dict, сложность O (n²). Подробнее см.
Http://www.ocert.org/advisories/ocert-2011-003.html .
Изменение значения хэш - функции влияет на порядок итерации dicts, sets
и других отображений. Python никогда не давал гарантий относительно этого порядка (и обычно он варьируется между 32-битными и 64-битными сборками).
Даже запуск на одной машине даст разные результаты при вызовах:
$ python -c "print(hash('http://stackoverflow.com'))"
-3455286212422042986
$ python -c "print(hash('http://stackoverflow.com'))"
-6940441840934557333
В то время как:
$ python -c "print(hash((1,2,3)))"
2528502973977326415
$ python -c "print(hash((1,2,3)))"
2528502973977326415
См. Также переменную окружения PYTHONHASHSEED:
Если эта переменная не установлена или установлена на random, случайное значение используется для семян хэши str, bytesи datetimeобъекты.
Если PYTHONHASHSEEDустановлено целочисленное значение, оно используется как фиксированное начальное число для генерации hash()типов, охватываемых рандомизацией хэша.
Его цель - разрешить повторяемое хеширование, например, для самотестирования самого интерпретатора, или позволить кластеру процессов Python совместно использовать хеш-значения.
Целое число должно быть десятичным числом в диапазоне [0, 4294967295]. Указание значения 0отключит рандомизацию хэша.
Например:
$ export PYTHONHASHSEED=0
$ python -c "print(hash('http://stackoverflow.com'))"
-5843046192888932305
$ python -c "print(hash('http://stackoverflow.com'))"
-5843046192888932305