【发布时间】:2021-01-28 13:05:26
【问题描述】:
这是我对 python3 的测试代码:
#! /usr/bin/python3
from memory_profiler import profile
@profile(precision=10)
def f():
huge_list = [x for x in range(2000)]
del huge_list
print("finish")
if __name__ == "__main__":
f()
输出:
Line # Mem usage Increment Line Contents
================================================
4 17.2109375000 MiB 17.2109375000 MiB @profile(precision=10)
5 def f():
6 17.2109375000 MiB 0.0000000000 MiB huge_list = [x for x in range(2000)]
7 17.2109375000 MiB 0.0000000000 MiB del huge_list
8 17.2226562500 MiB 0.0117187500 MiB print("finish")
这表明huge_list = [x for x in range(2000)] 不占用任何内存。
我改成huge_list = "aa" * 2000,还是一样。
但如果我将 2000 更改为 20000,它会获得一些内存。
为什么?
这里有一个类似的问题: What does “del” do exactly?
【问题讨论】:
-
不,不一样
-
来自您使用的库的文档:“问:结果有多准确?答:该模块通过向操作系统内核查询当前进程已分配的内存量来获取内存消耗,这可能与 Python 解释器实际使用的内存量略有不同。此外,由于垃圾收集器在 Python 中的工作方式,结果可能在平台之间甚至在运行之间有所不同。”
-
如果你想对你的应用进行精确的内存跟踪,你应该考虑使用tracemalloc。