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

为何Python中同一模块仅被导入执行一次而非两次?

Python模块导入仅执行一次代码的原因解析

问题背景

项目文件夹project下包含3个文件:module_b.py、script_B1.py、script_B2.py,文件内容及执行结果如下:

文件内容

  • module_b.py:
print("Inside module_b")
  • script_B1.py:
import module_b
print("Inside script_B1")
  • script_B2.py:
import module_b
import script_B1
print("Inside script_B2")

执行结果

  • 运行script_B1.py输出:
Inside module_b
Inside script_B1
  • 运行script_B2.py输出:
Inside module_b
Inside script_B1
Inside script_B2

疑问

执行script_B2.py时,module_b.py先后被script_B2.py和script_B1.py导入,预期会两次打印Inside module_b,但实际仅出现一次,原因是什么?

核心原因

Python的模块导入机制设计为模块仅加载并执行一次,具体逻辑:

  1. 首次执行import module_b时,Python会定位模块文件,执行其内部所有代码,然后将模块对象存入sys.modules字典(键为模块名module_b)。
  2. 后续任何地方再执行import module_b,Python会先检查sys.modules:
    • 若模块已存在,直接返回已加载的模块对象,不会重复执行模块内的代码。
  3. 你通过查看sys.modules的结果也验证了这一点:首次导入后module_b已在字典中,后续导入跳过了代码执行环节。

扩展:强制重新执行模块代码(不推荐)

如果确实需要重复执行模块代码,可以手动移除sys.modules中的模块后重新导入:

import sys
# 首次导入
import module_b

# 删除已加载的模块
del sys.modules['module_b']
# 重新导入,此时会再次执行模块代码
import module_b

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:54:58