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

Python多文件中导入模块的行为疑问:属性修改与重绑定差异

为什么修改模块属性能被其他文件感知,但重绑定模块变量不行?

核心逻辑:Python模块的单例特性与变量指向的区别

  • Python中模块被首次导入后,会被缓存到sys.modules字典中,后续所有import操作都是直接复用这个缓存里的同一个模块对象,不会重新执行模块代码。

两种操作的本质差异

  1. 修改config.x的情况
    script_1和script_2里的config变量,本质上都是指向sys.modules['config']这个共享的模块对象。当你在script_1里执行config.x=5时,是直接修改了这个共享对象的属性值——相当于给同一个“盒子”里的东西换了内容,不管谁拿着这个“盒子”的引用,打开都能看到新内容,所以script_2调用print_config时能拿到x=5。

  2. 重绑定config为字符串的情况
    在script_1里执行config = "foo",只是改变了script_1本地作用域里config变量的指向:把它从原来的模块对象,改成了指向字符串对象。但script_2里的config变量,依然指向sys.modules里的那个模块对象,完全不受script_1本地变量重绑定的影响,所以第二次调用print_config还是输出原来的模块对象和x=5。

打个通俗的比方:

  • 你和同事各拿了一把打开同一个储物间的钥匙(对应两个文件里的config变量指向同一个模块对象)。你进去把储物间里的箱子换成了新的(修改config.x),同事进去也能看到新箱子。
  • 但如果你把自己的钥匙换成了打开另一个房间的(重绑定config为字符串),同事的钥匙还是原来那把,他打开的依然是原来的储物间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:55:04