Python跨文件修改全局变量:不同导入方式的结果差异答疑
两种导入方式导致全局变量修改结果不同的原因
先看你的代码示例:
a.py 文件内容
x = 10 # global variable def modify_global_variable(): global x # 声明使用全局变量x x = 20 # 修改全局变量x的值
第一种写法:from a import x
b.py 文件内容
from a import x modify_global_variable() print(x)
执行后输出10,原因是:
from a import x是把a模块中全局变量x的当前值(10)复制了一份,放到b文件自己的命名空间里,相当于b里有了一个独立的变量x,和a模块里的x只是初始值一致,并不是同一个变量。- 调用
modify_global_variable()时,确实修改了a模块内部的全局x(变成20),但b文件里的x还是之前复制过来的10,所以打印结果是10。
第二种写法:import a
b.py 文件内容
import a a.modify_global_variable() print(a.x)
执行后输出20,原因是:
import a是把整个a模块作为一个对象导入到b的命名空间里,后续访问的a.x始终指向a模块内部的那个全局变量。- 调用
a.modify_global_variable()修改的就是a模块对象内部的x属性,之后打印a.x自然能拿到更新后的20。
简单总结:前者是复制变量值到本地命名空间,后者是直接操作原模块对象的属性,这就是两种写法结果不同的核心原因。
内容的提问来源于stack exchange,提问作者user22076626
相关产品推荐
相关产品推荐

