Sobes.tech
Back to questions
Middle
9

Какие есть ограничения на ключи в dict в Python?

Companies where asked
ДомкликДомклик

Answer from AI

sobes.tech AI

Что хотят услышать интервьюеры:

Ключ в dict должен быть хешируемым и стабильным на протяжении жизни записи в словаре. Обычно это значит, что подходят неизменяемые типы вроде str, int, tuple из хешируемых элементов. Изменяемые объекты, такие как list, dict и set, ключами быть не могут.

Определение:

В Python ключ словаря используется для быстрого поиска значения по хешу, поэтому у ключа должен быть корректный __hash__() и согласованный __eq__(). Практически это означает, что объект должен быть хешируемым: его хеш не должен меняться, пока он используется как ключ.

Ограничения на ключи такие:

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

Пример использования:

d = {
    "name": "Alice",
    42: "answer",
    (1, 2): "tuple key"
}

print(d["name"])
print(d[42])
print(d[(1, 2)])

# Нельзя использовать list как ключ:
# bad = {[1, 2]: "value"}  # TypeError: unhashable type: 'list'

Пояснение кода:

Код показывает три допустимых типа ключей: строку, число и кортеж. Строки и числа хешируемы, поэтому нормально работают в dict. Кортеж тоже подходит, если все его элементы сами хешируемы.

В закомментированной строке list используется как ключ, и это приведёт к ошибке TypeError, потому что список изменяемый и не имеет стабильного хеша.

Ключевые моменты:

  • Ключ dict должен быть хешируемым.
  • Обычно подходят неизменяемые типы: str, int, float, tuple из хешируемых элементов.
  • list, dict, set и другие изменяемые объекты ключами быть не могут.
  • Если объект используется как ключ, его состояние не должно меняться так, чтобы менялся хеш.
  • При нарушении этого правила словарь может перестать находить уже добавленный ключ.