3

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

4

2 回答 2

1

要获取列表本身的大小,请使用getsizeof

sys.getsizeof(L)

要获取列表及其包含的所有对象的大小,请使用从文档链接的递归 sizeof 配方:

total_size(L)

但是,这在多个方面具有误导性。

首先,其中的许多对象L可能被其他引用共享。例如,将 300000 个数字副本添加0到列表中不会分配 300000 个新对象;它将重用缓存的0. 如果您只想计算由 唯一引用的对象L,您可以使用该gc模块过滤掉具有外部引用者或其他东西的任何内容,但这既困难又愚蠢。

其次,这只是告诉你对象使用的内存;它不计算跟踪对象和 malloc 分配器等所涉及的开销,但它确实计算了您已经支付的内存,因为它在启动空闲列表中。在脚本中分配 500KB 的对象根本不会增加内存使用量;分配 500MB 可能会使您的实际内存使用量增加 500MB 以上,而您的虚拟机使用量甚至更多。除非您知道自己真正想要的是什么,否则没有任何数字对您有意义,包括这个数字。

于 2013-07-18T00:00:42.683 回答
0

尝试Pimpler

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
于 2013-07-18T00:42:56.393 回答