hash()

Функция hash() возвращает целое число — хэш объекта, используемое словарями и множествами для быстрого поиска. Хэшируемыми считаются неизменяемые объекты: числа, строки, кортежи (если их элементы тоже хэшируемы), frozenset и т. п. Списки и словари — нет.

Сигнатура

hash(object)

Параметры:

  • object — любой объект, поддерживающий метод __hash__().

Возвращает: целое число. Для одинаковых равных объектов значения совпадают.

Примеры

Хэши простых значений:

print(hash(42))
print(hash(3.14))
print(hash("python"))
42
322818021289917443
-8923990455324387585

Равные значения дают одинаковый хэш:

print(hash(10) == hash(10.0))
print(hash("abc") == hash("abc"))
True
True

Кортеж хэшируем, список — нет:

print(hash((1, 2, 3)))
try:
    hash([1, 2, 3])
except TypeError as e:
    print("error:", e)
529344067295497451
error: unhashable type: 'list'

Свой класс с собственным хэшированием:

class Point:
    def __init__(self, x, y):
        self.x, self.y = x, y
    def __hash__(self):
        return hash((self.x, self.y))
    def __eq__(self, other):
        return (self.x, self.y) == (other.x, other.y)

p = Point(1, 2)
print(hash(p) == hash(Point(1, 2)))
True

Применение для дедупликации:

items = ["a", "b", "a", "c", "b"]
unique = list({hash(x): x for x in items}.values())
print(unique)
['a', 'b', 'c']

Примечание

Хэш строки в Python рандомизирован между запусками интерпретатора ради защиты от атак с подбором коллизий. Конкретное число в примерах может отличаться на вашей машине.

См. также

Примечание

Описание основано на официальной документации Python (docs.python.org), распространяемой под лицензией PSF License v2. © Python Software Foundation.