Хэшируемые типы данных в Python — это неизменяемые типы, экземпляры которых имеют фиксированное хэш-значение на протяжении всего своего жизненного цикла. Это значение вычисляется с помощью хэш-функции и используется для быстрого поиска элементов в множествах (sets) и ключей в словарях (dictionaries).
Свойства хэшируемых типов:
__hash__: ** Этот метод должен возвращать целочисленное хэш-значение объекта. Если метод не определен или возвращает None, объект считается нехэшируемым.__eq__: ** Этот метод должен определять равенство объектов. Если два объекта равны (a == b), то их хэш-значения должны быть равны (hash(a) == hash(b)). Обратное неверно: два объекта могут иметь одинаковое хэш-значение, но быть неравными (коллизия хэшей).Примеры хэшируемых встроенных типов:
int, float, complex):
python
str):
python
tuple): При условии, что все элементы кортежа хэшируемы.
python
bool):
python
NoneType:
python
Примеры нехэшируемых встроенных типов:
list): Изменяемы.
python
set): Изменяемы.
python
dict): Изменяемы.
python
Использование хэшируемых типов:
python
python
Пользовательские классы по умолчанию хэшируемы, если они наследуют от класса, который определяет __hash__, или если они не определяют методов __eq__ и __hash__. Если определен только __eq__, класс становится нехэшируемым. Можно сделать пользовательский класс хэшируемым, определив методы __eq__ и __hash__ таким образом, чтобы они соответствовали своим требованиям. Для неизменяемых объектов можно использовать декоратор @total_ordering в сочетании с определением __eq__ и других методов сравнения.
python