Back to questions
Junior — Middle
63
Может ли произойти ситуация, когда два различных ключа в словаре имеют одинаковый хэш?
Companies where asked
СБЕР Бизнес
Answer from AI
sobes.tech AI
Да, в словаре Python может возникнуть ситуация, когда два разных ключа имеют одинаковый хэш (так называемое коллизия хэшей). Это связано с тем, что функция hash() возвращает целое число фиксированного размера, а множество возможных ключей бесконечно, поэтому коллизии неизбежны.
Однако словарь Python умеет эффективно обрабатывать такие коллизии. При добавлении элемента с ключом, чей хэш совпадает с уже существующим, происходит сравнение ключей на равенство. Если ключи действительно разные, элемент помещается в другую ячейку или в цепочку, обеспечивая корректное хранение и поиск.
Пример:
class Key:
def __init__(self, val):
self.val = val
def __hash__(self):
return 42 # намеренно возвращаем одинаковый хэш
def __eq__(self, other):
return isinstance(other, Key) and self.val == other.val
k1 = Key(1)
k2 = Key(2)
d = {k1: 'value1', k2: 'value2'}
print(d[k1]) # value1
print(d[k2]) # value2
Здесь два разных объекта имеют одинаковый хэш, но словарь корректно различает их по равенству ключей.