导入模块作用域和变量
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.memory
或 mod2.memory.memory
实际上您没有更新这些模块中的 memory
字典,但它们每个都是一个 module
对象并且两者都引用同一个对象(一个空字典(memory={}
))并且当且仅当 x 和 y 是同一个对象时 x is y
为真,这里的结果为真。
所以在 test.py
你可以试试 :
print mod1.memory.memory
print mod2.memory.memory
它们根本不会被损坏。您只需在两个地方导入相同的对象,自然会 Python 报告它是相同的。
我的问题是关于 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.memory
或 mod2.memory.memory
实际上您没有更新这些模块中的 memory
字典,但它们每个都是一个 module
对象并且两者都引用同一个对象(一个空字典(memory={}
))并且当且仅当 x 和 y 是同一个对象时 x is y
为真,这里的结果为真。
所以在 test.py
你可以试试 :
print mod1.memory.memory
print mod2.memory.memory
它们根本不会被损坏。您只需在两个地方导入相同的对象,自然会 Python 报告它是相同的。