如何在Python中获得数字列表的内存印记?

2021-11-29 22:48:26 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个包含浮点和大整数混合的列表L(例如0.00148185、38749872947239428等等),我如何确定这个列表在我的计算机上占用了多少内存?你知道吗

2条回答
网友
1楼 ·

试试Pympler

In [132]: import pympler.asizeof as asizeof

In [133]: asizeof.asizeof([0]*300000)
Out[133]: 1200048

In [134]: asizeof.asizeof([0])
Out[134]: 56

In [135]: asizeof.asizeof(range(300000))
Out[135]: 6000032
网友
2楼 ·

要获取列表本身的大小,请使用^{}

sys.getsizeof(L)

要获取列表及其包含的所有对象的大小,请使用从文档链接的recursive sizeof recipe

total_size(L)

然而,这在多个方面具有误导性。你知道吗

首先,L中的许多对象可能被其他引用共享。例如,向列表中添加30万个0副本不会分配30万个新对象;它将重用缓存的0。如果您只想统计被L唯一引用的对象,您可以使用^{}模块过滤掉任何有外部引用的对象,但这将是困难和愚蠢的。你知道吗

第二,这只是告诉您对象使用的内存;它不计算跟踪对象和malloc分配器等所涉及的开销,而它只计算您已经付费的内存,因为它在startup freelist中。在脚本中分配500KB的对象根本不会增加内存使用量;分配500MB很可能会使实际内存使用量增加500MB以上,虚拟机使用量增加更多。除非你知道自己真正想要的是什么,否则没有什么数字对你有意义,包括这个数字。你知道吗

相关问题