Ключ словаря должен быть хешируемым со стабильным hash и согласованным равенством. List изменяем и не хешируем; tuple подходит только тогда, когда хешируемы все его элементы.
Почему в Python нельзя использовать список в качестве ключа словаря, но можно использовать кортеж (tuple)?
Ключ словаря должен быть хешируемым со стабильным hash и согласованным равенством. List изменяем и не хешируем; tuple подходит только тогда, когда хешируемы все его элементы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Ключ словаря должен быть хешируемым со стабильным hash и согласованным равенством. List изменяем и не хешируем; tuple подходит только тогда, когда хешируемы все его элементы.
Например, (1, "a") можно использовать ключом, а ([1, 2], "a") нельзя: внутри кортежа находится список. Неизменяемость самого контейнера не делает автоматически хешируемым его содержимое. Если бы менялся hash уже сохранённого ключа, словарь мог бы искать его не в той корзине. Для множества значений как ключа подойдёт frozenset, если порядок не важен и его элементы тоже хешируемы.