frmEnv = __import__(conf)
frmEnv.SCHEMA='abc'
toEnv = __import__(conf)
toEnv.SCHEMA='def'
print(frmEnv.SCHEMA, toEnv.SCHEMA)
输出:
('def', 'def')
我希望两个值都不同。
有没有办法使变量的值不可更改(常量或静态)
我不希望 frmEnv.SCHEMA 值一旦分配给它就改变。
frmEnv = __import__(conf)
frmEnv.SCHEMA='abc'
toEnv = __import__(conf)
toEnv.SCHEMA='def'
print(frmEnv.SCHEMA, toEnv.SCHEMA)
输出:
('def', 'def')
我希望两个值都不同。
有没有办法使变量的值不可更改(常量或静态)
我不希望 frmEnv.SCHEMA 值一旦分配给它就改变。
一个python模块只导入一次;第二次导入只返回已经初始化的模块——它的代码不会第二次执行。这意味着您的frmEnv
和toEnv
是对同一对象的两个引用。
如果您解释您要完成的(具体任务),有人可以告诉您如何去做。这不是办法。
正如其他人所解释的那样,您尝试做的事情是完全错误的。但是,如果我尝试阅读您的想法(尽管我很少擅长心灵感应),也许您想要的是拥有第一个模块的副本?
然后您可能想要使用该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
模块,并在当前环境中为其指定两个不同的名称,以便它们实际加载两次。它应该具有与副本相同的效果,但更多地依赖于文件的文件系统放置,因此不那么优雅(这就是我不给出示例的原因)。读者更难理解你为什么这样做。
高温高压