frmEnv = __import__(conf)
frmEnv.SCHEMA='abc'
toEnv = __import__(conf)
toEnv.SCHEMA='def'
print(frmEnv.SCHEMA, toEnv.SCHEMA)
输出:
('def', 'def')
我希望两个值都不同 有没有办法使变量的值不可变(常量或静态)
一旦为其赋值,我不希望frmEnv.SCHEMA值改变。
答案 0 :(得分:1)
python模块只导入一次;第二个导入只返回已经初始化的模块 - 它的代码不会再次执行。这意味着您的frmEnv
和toEnv
是对同一对象的两次引用。
如果你解释一下你想要完成的(具体任务),有人可以告诉你如何去做。这不是方法。
答案 1 :(得分:1)
然后,您可能希望使用copy
模块,并更改对象的副本:
frmEnv = __import__(conf)
frmEnv.SCHEMA='abc'
toEnv = copy.deepcopy(frmEnv) # or copy.copy() depending on what are the members of frmEnv...
toEnv.SCHEMA='def'
print(frmEnv.SCHEMA, toEnv.SCHEMA)
Output:
('abc', 'def')
您可能还希望使用imp
模块使用其文件名加载模块,并在当前环境中为其指定两个不同的名称,以便实际加载两次。它应该与副本具有相同的效果,但是更多地依赖于文件的文件系统放置,因此不那么优雅(这就是为什么我没有给出一个例子)。读者理解为什么要这样做会更加困难。
HTH