【问题标题】:Why is the size of a list less than the size of the objects that comprise it? [duplicate]为什么列表的大小小于组成它的对象的大小? [复制]
【发布时间】:2020-06-20 08:15:16
【问题描述】:

我对@9​​87654321@ 和dict 对象使用的内存空间有疑问。 我的 Python 3.7 shell 显示:

>>> import sys
>>> list_ = []
>>> sys.getsizeof(list_)
64
>>> dict_ = {}
>>> sys.getsizeof(dict_)
240
>>> list_ += dict_,
>>> list_
[{}]
>>> sys.getsizeof(list_)
96

我不明白发生了什么。

  • list 对象为每个元素占用64 字节的内存(shell 中显示的内容)+ 8 字节。
  • dict 对象占用240 字节的内存。

  • 因此,在将字典添加为元素后,list 应该占用64 + 8 + 240 = 312 字节。

为什么列表占用的内存只增加了32 字节? dict240 字节内存发生了什么变化?为什么使用的内存量只增加了32 字节?

【问题讨论】:

  • 列表包含对字典的引用,而不是字典的内容。

标签: python python-3.x


【解决方案1】:

与@Kaya3 一样,列表的大小不包括它所引用的事物的大小。

>>> list_ = [{}]
>>> sys.getsizeof(list_)
40
>>> sys.getsizeof(list_[0])
136 

【讨论】:

  • 谢谢kpie 和@kaya3。现在我明白了。但还有一个问题。有什么快速的方法可以检查列表使用的所有内存以及列表引用的对象吗?
  • 好吧,您可以编写一个小递归函数来挖掘列表,但如果您在列表中有对列表的引用或相同引用的重复项,则可能会出现问题。
  • 您可以在实例化列表之前和之后检查进程使用的总内存。 stackoverflow.com/questions/938733/…
  • 感谢您的帮助
  • @Marco 你check the docs了吗?有一个指向 recipe 的链接。
猜你喜欢
  • 2019-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
相关资源
最近更新 更多