неизменяемый объект модуля, может использоваться как ключ словаря - PullRequest
0 голосов
/ 26 мая 2018

Я недавно прочитал в Изучение Python 5th от Mark Lutz 2013 , что объекты модуля Python являются неизменяемыми, поэтому они могут использоваться в качестве ключей словаря.

enter image description here

Но скажите, что у меня есть два файла a.py и b.py, у меня нет проблем с импортом модуля b в a.py изатем измените модуль b, добавив свойство к b объекту модуля.

#a.py file 

import b
b.additionalProperty = 'hello'

Так как же неизменным является объект модуля Python и как его можно использовать в качестве ключей словаря?

1 Ответ

0 голосов
/ 26 мая 2018

Внесение изменений в объект модуля (например, добавление или изменение значений в его глобальном пространстве имен) не меняет его хеш-значения.Так что, хотя оно не является неизменным по любому нормальному определению, его «значение» для целей хеширования является его идентичностью, которая является неизменной.

Таким образом, вы действительно можете использовать объект модуля в качестве ключа длятолковый словарь.Вы также можете использовать экземпляры пользовательских классов, как этот:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...