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

循环导入场景下Python全局变量跨模块读取更新值问题咨询

问题根源

直接运行python a.py时,a会被识别为__main__主模块加载,而b.py中执行import a as my_a时,Python会将a作为普通模块重新加载一次,导致程序中存在两个完全独立的模块实例:你在main函数里修改的是主模块__main__下的x变量,b读取的是普通a模块下的x变量,因此看不到更新。

最简修改方案

无需修改b.py的任何代码,仅需调整a.py的开头,将当前主模块注册到系统模块缓存中,让b导入a时直接复用当前运行的主模块实例即可:
修改后的a.py代码如下:

import sys
# 让后续导入a模块的操作直接复用当前主模块实例
sys.modules['a'] = sys.modules['__main__']

x = {}
from b import *

def main():
  global x
  x[0] = 'hello'
  foo()
  

if __name__ == '__main__':
  main()

运行后即可输出期望结果{0: 'hello'}。

替代方案

如果你不想修改系统模块缓存,也可以直接修改b读取的普通a模块下的x变量,改动同样很小:

x = {}
# 先导入普通a模块实例
import a
from b import *

def main():
  # 直接修改普通a模块下的x,和b读取的变量保持一致
  a.x[0] = 'hello'
  foo()
  

if __name__ == '__main__':
  main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:07