Sobes.tech
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

Здесь два разных объекта имеют одинаковый хэш, но словарь корректно различает их по равенству ключей.