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.