导入模块作用域和变量

Import module scope and variables

我的问题是关于 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

它 return 是的。这是预期的吗? mod1 和 mod2 的命名空间在什么时候变得纠缠在一起? 如果我的问题没有意义,这是我的第一次。抱歉。

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

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

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

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

它们根本不会被损坏。您只需在两个地方导入相同的对象,自然会 Python 报告它是相同的。