You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

导入封闭命名空间时全局变量修改丢失问题咨询

Python自导入的命名空间隔离问题

代码示例

a = 0

def func():
    import new_script # 自导入自身
    new_script.a += 1
    print(new_script.a)

func()
print(a)

执行输出

1 
1 
2 
0

原因解析

直接运行的脚本和导入的模块是两个完全独立的命名空间,具体执行流程如下:

  1. 当你用python new_script.py启动脚本时,它会以__main__模块身份执行:
    • 定义__main__.a = 0,定义func(),然后调用func()。
  2. 进入__main__.func(),执行import new_script:
    • Python加载全新的new_script模块实例,执行其顶层代码:
      • 定义new_script.a = 0,定义new_script.func(),然后调用new_script.func()。
  3. 进入new_script.func():
    • 此时new_script模块已加载,直接引用现有对象,将new_script.a递增到1并打印(第一个输出1)。
    • 函数返回后,new_script模块顶层执行print(a),这里的a是new_script.a,打印第二个1。
  4. 回到__main__.func():
    • 引用已加载的new_script模块,将new_script.a递增到2并打印(第三个输出2)。
  5. 回到__main__模块顶层,执行print(a):
    • 这里的a是__main__.a,从始至终未被修改,所以输出0。

内容的提问来源于stack exchange,提问作者Tortar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 19:12:19