Что может быть ключом в словаре?
В словаре Python ключом может быть любой объект, поддерживающий хэширование, то есть с определённым __hash__ методом.
Ключом в словаре Python может быть любой объект, который обеспечивает хэширование и уникальность ключа. Это означает, что объект должен быть хэшируемым: иметь определённый метод __hash__ и стабильное значение хэша на всём протяжении использования в качестве ключа. На практике этим требованиям обычно отвечают неизменяемые объекты; примерами таких объектов являются числа, строки и кортежи (кроме случаев, если хотя бы один элемент кортежа — изменяемый объект):
Однако списки не являются хэшируемыми, поэтому они не могут быть использованы в качестве ключей в словаре. Попытка использовать список как ключ приведёт к выбросу TypeError с сообщением о том, что тип не является хэшируемым.
Пользовательские классы также могут быть использованы в качестве ключей, если они переопределяют метод __hash__ таким образом, чтобы он корректно вычислял хэш-значение объекта. Также, если мы хотим использовать наши объекты как ключи в словарях, нужно определять и метод __eq__, чтобы при одинаковых хэш-значениях у разных объектов в памяти проверялось их равенство и не записывалось новое значение. Например:
Здесь методы __hash__ и __eq__ определены таким образом, чтобы объекты с одинаковыми значениями x и y имели одинаковые хэш-значения и по сути считались одним и тем же ключом, поэтому удалось перезаписать значение obj1 с помощью obj3.
Важно помнить, что в Python ключи в словаре должны быть уникальными, и поиск по ключу выполняется быстро благодаря хэшированию.
Отметьте свой прогресс