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

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Домклик

Стек: Python

> Пример ответа

В Python ключи словаря должны быть неизменяемыми (hashable) объектами. Это означает, что у объекта должен быть метод __hash__(), возвращающий целое число, которое не меняется в течение жизни объекта, и метод __eq__() для сравнения. Если два объекта равны (==), их хеши должны совпадать.

Основные ограничения:

  1. Нельзя использовать изменяемые типы: списки, множества, словари (они не хешируемы). Попытка приведёт к TypeError: unhashable type.
  2. Кортежи можно, но с оговоркой: кортеж, содержащий изменяемые элементы (например, список), тоже не может быть ключом.
  3. Числа: целые числа, float, complex - допустимы. При этом 1 и 1.0 считаются разными ключами, но 1 и True - нет (так как True равен 1 по __eq__).
  4. Строки и байты: работают как ключи.
  5. Пользовательские объекты: по умолчанию хешируемы (на основе id()), если не переопределён __eq__ без __hash__. Если переопределён __eq__, нужно явно задать __hash__, иначе объект станет нехешируемым.
  6. None: может быть ключом.
  7. Ключи должны быть уникальными: при добавлении дублирующегося ключа старое значение перезаписывается.

Примеры:

PYTHON
d = {}
d[42] = "int" # OK
d["key"] = "str" # OK
d[(1, 2)] = "tuple" # OK
d[[1, 2]] = "list" # TypeError
d[{"a": 1}] = "dict" # TypeError
d[True] = "bool" # OK, но True == 1

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью