讲师中心 微信公众号
AI工具推荐 视频效率加速

Python模块缓存机制_sys.modules工作原理

轻浩姑娘_8207

轻浩姑娘_8207

发布时间:2026-03-03 21:01:29

|

477人浏览过

|

来源于php中文网

原创

Python模块导入依赖sys.modules字典缓存,首次import加载执行,后续直接返回已缓存模块对象;单纯删除sys.modules键不能真正卸载模块,因对象引用和跨模块绑定仍存在。

python模块缓存机制_sys.modules工作原理

Python 的模块导入不是每次执行 import 都重新加载源码,而是依赖 _sys.modules 这个字典做缓存控制——它就是 Python 模块系统的“记忆中枢”。

什么是 sys.modules?

sys.modules 是一个内置的字典,键是已导入模块的名称(如 "os"、"json"),值是对应已加载的模块对象。Python 在每次 import 时,会先查这个字典:如果模块名已存在且对应有效模块对象,就直接返回它,跳过查找、编译、执行等后续步骤。

你可以随时查看或修改它(虽然不建议随意删改):

import sys
print("json" in sys.modules)  # True(导入后即存在)
print(sys.modules["json"].__name__)  # "json"

模块缓存如何影响导入行为?

缓存机制带来两个关键现象:

立即学习“Python免费学习笔记(深入)”;

Python Hardener
Python Hardener

通过完整的安全审查、代码整洁重构、健壮的错误处理、正确的日志记录以及完整的文档字符串覆盖,强化 Python 脚本。

下载
  • 同一模块多次 import 等价于一次:无论你在不同文件、不同位置 import 同一个模块十次,它只被加载并执行一次(__init__.py 或模块顶层代码仅运行一次);
  • 动态修改 sys.modules 可绕过正常导入流程:比如手动塞入一个伪造模块对象,后续 import 就会直接用它;也可删除键来强制重载(但需配合 importlib.reload() 才安全)。

为什么不能靠删 sys.modules 键来“真正卸载”模块?

单纯 del sys.modules["mymodule"] 只是移除了缓存条目,并不会回收模块中已创建的类、函数、全局变量等对象。如果其他地方还持有对这些对象的引用(比如某个类的实例、闭包中的函数),模块的代码对象和数据仍驻留在内存中。更关键的是:

  • 模块内定义的类,其 __module__ 属性仍指向原模块名;
  • 已导入该模块的其他模块,其局部命名空间里保存的仍是旧模块对象引用;
  • 没有自动清理 from xxx import yyy 导入的名称绑定。

所以“卸载”在 Python 中本质不可靠,importlib.reload() 也只是尝试重新执行模块体,不解决跨模块引用一致性问题。

实际开发中要注意什么?

理解 sys.modules 能帮你避开常见陷阱:

  • 热重载调试时,别只删 sys.modules 键,要用 importlib.reload() 并确保所有依赖链都更新;
  • 写插件系统或沙箱环境时,可预填充 sys.modules 来拦截导入(例如 mock 某个模块);
  • 避免在模块顶层写有副作用的代码(如启动服务、连接数据库),因为它的执行时机由首次 import 决定,且只发生一次;
  • 循环导入之所以有时“能跑”,部分原因就是中间态模块对象已被写入 sys.modules,让另一方 import 能拿到不完整但存在的模块对象。

不复杂但容易忽略。

热门AI工具

更多
讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1891

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5184

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1829

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

31377

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3707

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3727

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1243

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Postman身份认证怎么配置
Postman身份认证怎么配置

本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

0

2026.11.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn