我的问题是关于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的名称空间变得纠结? 对不起,如果我的问题没有意义,这是我的第一次。
答案 0 :(得分:0)
在Python中,模块本身就像一个单例。 你所看到的就是它的影响。
答案 1 :(得分:0)
您可能会注意到mod1.memory.memory
或mod2.memory.memory
实际上您没有更新这些模块中的memory
字典,但每个模块都是module
个对象并且两者都引用相同的对象(空字典(memory={}
))和x is y
是真的,当且仅当x和y是同一个对象时,结果才为真。
所以在test.py
你可以尝试:
print mod1.memory.memory
print mod2.memory.memory
答案 2 :(得分:0)
他们根本没有受到损害。您只需在两个位置导入相同的对象,因此Python自然会报告它是相同的。