如果我有一个包含 float 和大整数混合的列表 L(例如 0.00148185、38749872947239428 等等),我如何确定这个列表在我的计算机上占用了多少内存?
最佳答案
要获取列表本身的大小,请使用 getsizeof
:
sys.getsizeof(L)
要获取列表的大小及其包含的所有对象,请使用 recursive sizeof recipe从文档链接:
total_size(L)
但是,这在多个方面具有误导性。
首先,L
中的许多对象可能被其他引用共享。例如,将数字 0
的 300000 个副本添加到列表中不会分配 300000 个新对象;它将重用缓存的 0
。如果你只想计算被 L
唯一引用的对象,你可以使用 gc
模块来过滤掉任何带有外部推荐人或其他东西的东西,但这会很困难,而且很愚蠢。
其次,这只是告诉你对象使用的内存;它不计算跟踪对象和 malloc 分配器等所涉及的开销,但它确实计算您已经支付的内存,因为它在启动空闲列表中。在脚本中分配 500KB 的对象根本不会增加内存使用量;分配 500MB 可能会使您的实际内存使用量增加 500MB 以上,而您的 VM 使用量甚至更多。除非您知道自己真正要求的是什么,否则没有任何数字对您有意义,包括这个数字。
关于python - 如何在 Python 中获取数字列表的内存印记?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17712293/