【发布时间】:2021-02-03 02:28:57
【问题描述】:
我使用以下 python 代码来衡量将元素附加到大型列表字典的效率。字典有N 条目。每个条目都是M 整数的列表。所以我假设所占用的内存大约是N * M * 4bytes。如果N是100万,M是300,那么1M * 300 * 4bytes,也就是1.2G。但令我惊讶的是,python 的sys.getsizeof 只报告了 40 兆字节的内存消耗。我哪里做错了?
import sys
import time
N=1000000
M=300
start = time.time()
d={}
for n in range(N):
d[n]=[]
for m in range(M):
d[n].append(m)
print ("Time elapsed in seconds = {}".format(time.time() - start))
print ("Size in Megabytes = {} ".format(sys.getsizeof(d)/1024.0/1024.0))
上面的代码报告了
Time elapsed in seconds = 54.5907461643219
Size in Megabytes = 40.00010681152344
那么,为什么报告的内存使用量是 40 MB,而不是 1.2 GB?
【问题讨论】:
-
您是如何到达
1.2 Gigabytes的?好像错了 -
1M*300*4byte=1.2 GB。有什么问题吗?
-
另外,您假设每个 int 占用四个字节的内存空间是错误的。还有更多,因为将为每个对象创建一个 Python 对象。
sys.getsizeof(1)在我的系统上返回 28。
标签: python performance memory