为何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的模块导入机制设计为模块仅加载并执行一次,具体逻辑:
- 首次执行
import module_b时,Python会定位模块文件,执行其内部所有代码,然后将模块对象存入sys.modules字典(键为模块名module_b)。 - 后续任何地方再执行
import module_b,Python会先检查sys.modules:- 若模块已存在,直接返回已加载的模块对象,不会重复执行模块内的代码。
- 你通过查看
sys.modules的结果也验证了这一点:首次导入后module_b已在字典中,后续导入跳过了代码执行环节。
扩展:强制重新执行模块代码(不推荐)
如果确实需要重复执行模块代码,可以手动移除sys.modules中的模块后重新导入:
import sys # 首次导入 import module_b # 删除已加载的模块 del sys.modules['module_b'] # 重新导入,此时会再次执行模块代码 import module_b
内容的提问来源于stack exchange,提问作者User051209
相关产品推荐
相关产品推荐

