Ниже приведена часть кода из моего последнего проекта.Python - copy.deepcopy() не работает при копировании локальной области в глобальную переменную области видимости
import copy
chg = None
def change(obj):
print("obj =", obj)
chg = copy.deepcopy(obj)
#chg = obj
print("chg = obj =", chg)
class B():
def __init__(self):
setattr(self, 'example_member', "CHANGED!")
self.configure()
def configure(self):
global chg
change(self.example_member)
print("chg on inside =", chg)
b = B()
print("print chg on global =", chg)
Так дело в том, я ожидал глобального изменения его значения от None
до значения obj
«s.
Так что я ожидал ниже выхода:
obj = CHANGED!
chg = obj = CHANGED!
chg on inside = CHANGED!
print chg on global = CHANGED!
Однако он пришел к моему удивлению, что глобальный идентификатор не меняется вообще. Ниже приведен результат, полученный по вышеуказанному коду.
obj = CHANGED!
chg = obj = CHANGED!
chg on inside = None
print chg on global = None
Так что мне нужно сделать для того, чтобы сделать глобальную с местным контекстной obj
/example_member
значение объекта? Я новичок в Python, поэтому некоторые объяснения могут так же хорошо мне помочь. :)
Что лучше? Как насчет того, нужен ли мне объект, который должен работать во множестве модулей? Я не могу придумать другого более чистого способа, чем сделать объект глобальным или статическим. Передача объекта по модулю в модуль сильно затрудняет обслуживание. –
Кстати, я сейчас работаю с Python с Pyside. Мне нужно передать объект, относящийся к конкретному виджету во всех модулях. Любые руководства для такого рода работ, которые не нуждаются в каких-либо глобальных переменных? :) –