Почему хеш (Нет) изменяется на разных платформах и в разных вызовах?

Я столкнулся с действительно странным поведением с хэш-функцией на Python. Когда я запускаю следующую команду в Mac OS (10.10), я получаю разные значения от разных вызовов.

$ python -c "print hash(None)" -9223372036579216774 $ python -c "print hash(None)" -9223372036582852230 

С другой стороны, когда я запускаю то же самое на Ubuntu 14.04, я получаю:

 $ python -c "print hash(None)" 596615 $ python -c "print hash(None)" 596615 

Для меня это похоже, в OS X, python каким-то образом использует адрес памяти, а Ubuntu – нет. Из этого я вижу, что хэш-функция, вероятно, зависит от реализации. Но разве это не должно основываться только на «ценности» Ничего? Что представляют собой эти цифры? Почему он ведет себя по-разному даже на одной и той же версии python, но на разных ОС?

One Solution collect form web for “Почему хеш (Нет) изменяется на разных платформах и в разных вызовах?”

None.__hash__ коррелирует с _Py_HashPointer хэширования _Py_HashPointer . Поэтому в основном указатель объекта используется как хэш. Для None из синглов это безопасно использовать, но не детерминированным. Для того, чтобы указатель, присвоенный подходящему целочисленному типу p значение хеш-функции вычисляется следующим образом:

  (p >> 4) | (p << (8 * SIZEOF_VOID_P - 4)) 

Ссылаясь на это, в исходном коде говорится:

нижние 3 или 4 бита, вероятно, равны 0; поверните y на 4, чтобы избежать чрезмерных столкновений хешей для dicts и наборов

  • область действия функции eval в python
  • Почему max (iterable) работает намного медленнее, чем эквивалентный цикл?
  • Какие стандартные библиотечные модули необходимы для запуска интерпретатора Python 3.5?
  • Почему для _ в диапазоне (n) медленнее, чем для _ в * n?
  • Почему изменение dict во время итерации не всегда вызывает исключение?
  • Почему __code__ для функции (Python) изменен
  • Почему добавление списка Python должно быть однородным?
  • Почему отсортированный список больше, чем несортированный список
  •  
    Interesting Posts for Van-Lav

    Есть ли более pythonic способ открыть файл, если он указан как аргумент или stdin, если нет?

    BeautifulSoup4 stripped_strings дает мне байтовые объекты?

    Как ограничить выбор дочернего поля на основе значения родительского поля?

    Как сделать программу Python автоматически перезагружать себя

    Supervisord – запуск скрипта python backgroup

    Извлечение неупорядоченного списка для определенного <div>: BeautifulSoup

    Вычисление площади под кривой, заданной набором координат, не зная функции

    Как определить, является ли целое четным или нечетным

    Pylint рекурсивно для заданного имени файла

    Как получить данные в гистограмме

    Есть ли разница между RotatingFileHandler и logrotate.d + WatchedFileHandler для вращения журнала Python?

    Почему этот «» возвращает обратный список в Python?

    Презентации слайдов HTML с подсветкой синтаксиса Python

    Необходима помощь в интернационализации приложений Google App (Python)

    Как получить клавиши со стрелками и ввести ключ на клавиатуре в Linux, чтобы вести себя как windows7

    Python - лучший язык программирования в мире.