Python是否会重复加载已被其他模块导入的同名依赖库?
Python模块重复导入问题解答
结论
some_heavy_module 只会被导入1次,module1 会直接复用 main.py 中已经加载完成的模块对象,不会重复执行导入逻辑。
原理说明
Python 维护了一个全局的模块缓存字典 sys.modules,所有已经成功导入的模块都会被缓存到这个字典里:
- 每次执行
import语句时,Python 会优先查询sys.modules,如果目标模块已经存在缓存记录,就直接返回缓存的模块对象,不会重新加载模块 - 只有当缓存中没有对应模块时,才会执行完整的模块加载、初始化流程
对应示例的执行流程
- 运行
main.py后首先执行import some_heavy_module语句:此时sys.modules中无该模块记录,Python 完成完整的模块加载逻辑,将模块对象存入缓存 - 后续执行
from submodule import main1加载module1时,module1中的import some_heavy_module语句触发查询,发现缓存中已经存在该模块,直接复用已有对象,不会重复加载
验证方法
你可以在 some_heavy_module 的代码第一行加入打印语句:
print("some_heavy_module 被加载了")
运行 main.py 后只会看到一次该打印输出,即可证明模块仅被加载一次。
注意:只有主动调用
importlib.reload()强制重载模块时,才会跳过缓存重新执行加载逻辑,常规导入场景都会复用缓存。
内容的提问来源于stack exchange,提问作者CutePoison
相关产品推荐
相关产品推荐

