导入模块范围和变量

时间:2015-03-15 19:16:36

标签: python import namespaces

我的问题是关于python 2.7命名空间和模块导入。我的问题是理解为什么这样做: 如果我有一个模块文件memory.py:

memory={}
def insert_into(a,b):
   memory[a]=b

然后两个文件mod1.py和mod2.py使用类似的代码: mod1.py:

import memory
memory.insert_into('a',1)

mod2.py:

 import memory
 memory.insert_into('b',2)

最后是一个我作为脚本运行的test.py文件:

import mod1,mod2

不知怎的,如果我测试:

mod1.memory.memory is mod2.memory.memory

它返回True。这是预期的吗?在什么时候mod1和mod2的名称空间变得纠结? 对不起,如果我的问题没有意义,这是我的第一次。

3 个答案:

答案 0 :(得分:0)

在Python中,模块本身就像一个单例。 你所看到的就是它的影响。

答案 1 :(得分:0)

您可能会注意到mod1.memory.memorymod2.memory.memory实际上您没有更新这些模块中的memory字典,但每个模块都是module个对象并且两者都引用相同的对象(空字典(memory={}))和x is y是真的,当且仅当x和y是同一个对象时,结果才为真。

所以在test.py你可以尝试:

print mod1.memory.memory
print mod2.memory.memory

答案 2 :(得分:0)

他们根本没有受到损害。您只需在两个位置导入相同的对象,因此Python自然会报告它是相同的。