🐍 Python Pop Quiz: что окажется внутри `silly_dict`?
Вопрос звучит просто, но тут ловушка в том, как Python работает с ключами словаря.
Варианты:
A)
B)
C)
D) None of the above
Суть в том, что ключи в
Если объект пользовательского класса имеет такой же хеш, как строка
В таком случае новое значение просто перезапишет старое.
Ответ: B) `{"py": 10}`
Маленький пример, но отлично показывает важную вещь: в Python ключ словаря - это не “текстовое имя”, а объект с правилами хеширования и сравнения.
Вопрос звучит просто, но тут ловушка в том, как Python работает с ключами словаря.
Варианты:
A)
{"py": "amazing"} B)
{"py": 10} C)
{"py": "amazing", <__main__.MyClass object at ...>: 10} D) None of the above
Суть в том, что ключи в
dict сравниваются не по тому, как они выглядят в коде, а через __hash__ и __eq__.Если объект пользовательского класса имеет такой же хеш, как строка
"py", и при сравнении считается равным этой строке, то Python решит: это один и тот же ключ.В таком случае новое значение просто перезапишет старое.
Маленький пример, но отлично показывает важную вещь: в Python ключ словаря - это не “текстовое имя”, а объект с правилами хеширования и сравнения.