【问题标题】:List memory usage列出内存使用情况
【发布时间】:2014-01-13 07:41:45
【问题描述】:

我正在尝试改善我在 python 中的脚本的内存使用情况,因此我需要知道我的列表的 RAM 使用情况。 我用

测量内存使用情况
print str(sys.getsizeof(my_list)/1024/1024)

希望这会给我以 Mb 为单位的 RAM 中列表的大小。

它输出 12 Mb,但是在 top 命令中,我看到我的脚本在运行时使用了 4G 笔记本电脑的 70% 的 RAM。

此外,此列表应包含 ~500Mb 文件中的内容。

所以 12Mb 是不现实的。

如何测量实际内存使用情况?

【问题讨论】:

  • my_list 中包含的对象类型是什么?正如 Python 的文档所示:“只考虑直接归因于对象的内存消耗,而不考虑它所引用的对象的内存消耗。”您可以参考this 查看getsizeof 的示例用法

标签: python list memory


【解决方案1】:

sys.getsizeof 只考虑列表本身,而不考虑它包含的项目。

根据sys.getsizeof documentation

... 只有直接归因于对象的内存消耗是 占,而不是它所指的对象的内存消耗。 ...

使用Pympler:

>>> import sys
>>> from pympler.asizeof import asizeof
>>>
>>> obj = [1, 2, (3, 4), 'text']
>>> sys.getsizeof(obj)
48
>>> asizeof(obj)
176

注意:大小以字节为单位。

【讨论】:

  • 非常感谢,但是由于 MemoryError 失败
  • 这很有帮助。大多数答案认为 getsizeof 是真正的内存使用情况。
【解决方案2】:

这是一个代码 sn-p,它显示了两个建议的答案。但是,使用 pympler 给出了我认为对我的问题的正确和更简洁的答案。谢谢你 falsetru :-)

import sys
from pympler.asizeof import asizeof

tuple1 = ('1234','2019-04-27','23.4658')
tuple2 = ('1563','2019-04-27','19.2468')
klist1 = [tuple1]
klist2 = [tuple1,tuple2]
# The results for the following did not answer my question 
print ("sys.getsizeof(klist1): ",sys.getsizeof(klist1))
print ("sys.getsizeof(klist2): ",sys.getsizeof(klist2))    
# The results for the following give a quite reasonable answer
print ("asizeof(klist1): ",asizeof(klist1))
print ("asizeof(klist2): ",asizeof(klist2))

【讨论】:

    猜你喜欢
    • 2013-05-05
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-03
    • 2012-05-30
    • 2021-02-26
    • 2010-10-24
    • 2015-06-14
    相关资源
    最近更新 更多