如何将变量从同一导入模块的2个实例更改为

时间:2013-06-08 14:22:10

标签: python

frmEnv = __import__(conf)
frmEnv.SCHEMA='abc'

toEnv = __import__(conf)
toEnv.SCHEMA='def'

print(frmEnv.SCHEMA, toEnv.SCHEMA)

输出:

('def', 'def')

我希望两个值都不同 有没有办法使变量的值不可变(常量或静态)

一旦为其赋值,我不希望frmEnv.SCHEMA值改变。

2 个答案:

答案 0 :(得分:1)

python模块只导入一次;第二个导入只返回已经初始化的模块 - 它的代码不会再次执行。这意味着您的frmEnvtoEnv是对同一对象的两次引用。

如果你解释一下你想要完成的(具体任务),有人可以告诉你如何去做。这不是方法。

答案 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