Внесение изменений в объект модуля (например, добавление или изменение значений в его глобальном пространстве имен) не меняет его хеш-значения.Так что, хотя оно не является неизменным по любому нормальному определению, его «значение» для целей хеширования является его идентичностью, которая является неизменной.
Таким образом, вы действительно можете использовать объект модуля в качестве ключа длятолковый словарь.Вы также можете использовать экземпляры пользовательских классов, как этот:
class Example:
pass # no __hash__ or __eq__ defined
obj = Example()
d = {obj: "this works"}
print(d)
obj.foo = "the attributes of obj don't matter for the hash"
d[obj] = "so this overwrites the previous value in the dict"
print(d)