2024-04-25 14:52:19 发布
网友
如果我有一个包含浮点和大整数混合的列表L(例如0.00148185、38749872947239428等等),我如何确定这个列表在我的计算机上占用了多少内存?你知道吗
要获取列表本身的大小,请使用^{}:
sys.getsizeof(L)
要获取列表及其包含的所有对象的大小,请使用从文档链接的recursive sizeof recipe:
total_size(L)
然而,这在多个方面具有误导性。你知道吗
首先,L中的许多对象可能被其他引用共享。例如,向列表中添加30万个0副本不会分配30万个新对象;它将重用缓存的0。如果您只想统计被L唯一引用的对象,您可以使用^{}模块过滤掉任何有外部引用的对象,但这将是困难和愚蠢的。你知道吗
L
0
第二,这只是告诉您对象使用的内存;它不计算跟踪对象和malloc分配器等所涉及的开销,而它只计算您已经付费的内存,因为它在startup freelist中。在脚本中分配500KB的对象根本不会增加内存使用量;分配500MB很可能会使实际内存使用量增加500MB以上,虚拟机使用量增加更多。除非你知道自己真正想要的是什么,否则没有什么数字对你有意义,包括这个数字。你知道吗
试试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
要获取列表本身的大小,请使用^{} :
要获取列表及其包含的所有对象的大小,请使用从文档链接的recursive sizeof recipe:
然而,这在多个方面具有误导性。你知道吗
首先,} 模块过滤掉任何有外部引用的对象,但这将是困难和愚蠢的。你知道吗
L
中的许多对象可能被其他引用共享。例如,向列表中添加30万个0
副本不会分配30万个新对象;它将重用缓存的0
。如果您只想统计被L
唯一引用的对象,您可以使用^{第二,这只是告诉您对象使用的内存;它不计算跟踪对象和malloc分配器等所涉及的开销,而它只计算您已经付费的内存,因为它在startup freelist中。在脚本中分配500KB的对象根本不会增加内存使用量;分配500MB很可能会使实际内存使用量增加500MB以上,虚拟机使用量增加更多。除非你知道自己真正想要的是什么,否则没有什么数字对你有意义,包括这个数字。你知道吗
试试Pympler:
相关问题 更多 >
编程相关推荐