Ключ словаря должен быть хешируемым: иметь стабильный hash и согласованное сравнение равенства. Равные ключи обязаны иметь одинаковый hash.
Какие объекты в Python могут быть ключами словаря?
Ключ словаря должен быть хешируемым: иметь стабильный hash и согласованное сравнение равенства. Равные ключи обязаны иметь одинаковый hash.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Ключ словаря должен быть хешируемым: иметь стабильный hash и согласованное сравнение равенства. Равные ключи обязаны иметь одинаковый hash.
Частые ключи — строки, числа, None, а также кортежи и frozenset, если их элементы хешируемы. Список, dict и set по умолчанию ключами быть не могут.
Неизменяемость и хешируемость связаны, но не тождественны: пользовательский изменяемый объект может иметь identity-based hash. Опасно менять поля, участвующие в __hash__/__eq__, после вставки. Переопределение __eq__ без подходящего __hash__ обычно делает экземпляры нехешируемыми. Коллизии допустимы: словарь дополнительно сравнивает ключи.