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

Python中sys.modules的变更如何传播?是否为进程全局共享?

关于sys.modules的两个问题解答

1. sys.modules的变更如何进行传播?

sys.modules是Python用于缓存已导入模块的全局字典,它的变更直接在整个进程内生效,无需额外传播操作:

  • 当你在任意位置修改sys.modules(比如添加新模块对象、替换已有模块、删除键值对),后续所有尝试导入对应模块的代码,都会直接读取这个字典里的最新内容。
  • 举个实际场景:如果在模块A中把sys.modules['math']替换成自定义对象,那么模块B后续执行import math时,得到的就是你替换后的自定义对象,而非标准库的math模块。

2. sys.modules是否为整个Python进程所共享,使其变更可在不同模块、exec语句(即使是exec("",{},{})形式)中被感知?还是不同上下文会有不同副本?

sys.modules是整个Python进程全局共享的单例字典,不存在上下文隔离的副本:

  • 不同模块:无论在哪个模块中访问sys.modules,都是同一个字典实例,修改会被所有模块感知。
  • exec语句:哪怕使用exec("", {}, {})这种指定空全局、局部命名空间的形式,只要exec代码中导入sys并访问sys.modules,拿到的仍是进程全局的字典。比如在exec里修改sys.modules['test'],外部代码后续import test也会获取到修改后的对象。
  • 注意:如果exec代码未导入sys,仅使用局部/全局命名空间里的模块引用,那属于局部变量范畴,但只要通过sys.modules访问,就一定是全局共享的实例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:36:14