Python的__pycache__到底缓存什么?能缓存历史运行结果吗?—— 对PyCache的一点研究

为了研究__pycache__的作用,特做实验如下:

大致思路是先“使用版本控制工具git监控文件变动”,再“查阅官方文档进行深入了解”

新建空白测试用文件夹TestForPyCache并进入

新建文件夹TestForPyCache进入测试用文件夹

初始化Git仓库
初始化Git仓库
新建空白Py文件
新建空白Py文件

1
fsutil file createnew main.py 0

意思为创建大小为0的main.py文件

创建一个最简单的模块

新建MyModel文件夹

新建MyModel文件夹
并在新建的文件夹中新建两个空白文件__init__.pyGetSum.py

新建类中文件

1
2
fsutil file createnew .\MyModel\__init__.py 0
fsutil file createnew .\MyModel\GetSum.py 0

编辑新建的Py文件

MyModel/GetSum.py:

GetSum.py
这里使用一段非常简单的代码进行测试

1
2
3
4
5
6
# 求1 + 2 + 3 + ... + n
def getSumN(n: int) -> int:
s = 0
for i in range(n + 1):
s += i
return s

main.py:
main.py

1
2
3
4
5
from MyModel import GetSum

n = int(input("Input the n: "))
result = GetSum.getSumN(n)
print(result)

记得保存文件

提交到版本库

提交到版本库

可以看到有一次提交记录

并且当前工作区无改动
当前工作区无改动

运行一次main.py

运行一次

这次输入100000000

可以看到工作区有文件变动,新增了MyModel/__pycache__/文件夹

文件变动,MyModel/__pycache__/
同样添加到版本库

将Cache添加到版本库

可以看到一共有两条提交记录,且工作区无改动

那么,运行其他输入,PyCache会随之改变吗?

再次运行main.py
再次运行main.py
这次输入值50000000

查看工作区文件状态

发现工作区无改动
发现工作区无改动

这就说明每次运行不同输入可能不会导致__pycache__随之进行多次改变

我电脑上Python的版本为3.9.4

Python版本
查看官方文档:https://docs.python.org/zh-cn/3.9/tutorial/modules.html?highlight=pycache

官方文档
点击蓝色链接PEP 3147https://peps.python.org/pep-3147/

即可看到pycache创建流程图

pycache创建流程图
(图源:https://peps.python.org/_images/pep-3147-1.png

只有当“pycache/xx.pyc与源文件不符”时,才会重新编译生成pycache

pycache并不是为了存储“历史某次的执行结果”,而只是“为了快速加载模块的速度,把模块的编译版缓存在 pycache 目录”

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127724471


Python的__pycache__到底缓存什么?能缓存历史运行结果吗?—— 对PyCache的一点研究
https://blog.letmefly.xyz/2022/11/07/Other-Python-ResearchForPycache/
作者
Tisfy
发布于
2022年11月7日
许可协议