python中的重置字典无法从模块中工作

python中的重置字典无法从模块中工作,python,dictionary,global,Python,Dictionary,Global,我对这种奇怪的行为感到非常困惑。我有一个名为test.py的文件,其中包含以下内容: X={} def fun(): global X X = {'a':1,'b':2} 然后,我将该文件作为模块从控制台导入,并调用该函数 from test import * fun() 我希望X会被更新,但它仍然是一本空字典。 我正在使用 Python 3.8.2(默认值,2020年7月16日,14:00:26) 有人能复制这个吗?你知道为什么会这样吗 谢谢。在第二个文件中,导入X对象,

我对这种奇怪的行为感到非常困惑。我有一个名为test.py的文件,其中包含以下内容:

X={}

def fun():
    global X
    X = {'a':1,'b':2}
然后,我将该文件作为模块从控制台导入,并调用该函数

from test import *
fun()
我希望
X
会被更新,但它仍然是一本空字典。 我正在使用

Python 3.8.2(默认值,2020年7月16日,14:00:26)

有人能复制这个吗?你知道为什么会这样吗


谢谢。

在第二个文件中,导入
X
对象,并在运行
import
时将其绑定到名称。第二个文件中的
X
是附加到原始
{}
的第二个名称。或者,换句话说,它是一个单独的变量,恰好与原始文件中的
X
同名

更改原始文件中的
X
标签不会更改第二个文件中的
X
所查看的对象,因为它们是不同的标签(具有相同的名称)

这类似于这不会改变的方式:

X = {}
Y = X  # Y is the "imported X"
X = {'a':1,'b':2}
另见: