【问题标题】:Python List Memory Storage [duplicate]Python列表内存存储[重复]
【发布时间】:2018-04-21 20:59:33
【问题描述】:

我知道 Python 列表本质上是 C 数组,它们分配特定的顺序内存块;但是,这些内存块是否实际上存储了列表中的数据,或者它们只是指向内存中存储实际数据的另一个位置?

它是否可能取决于存储在列表中的对象的大小?因为您可以轻松地按顺序存储整数列表,但动态存储各种对象(包括自定义对象)会更加困难。

【问题讨论】:

  • 检查这个文档,主要是参考,docs.python.org/2/faq/design.html#how-are-lists-implemented
  • 没有。它们是 Py_Object 指针的 c 数组。
  • 一个很好的解释here
  • 此外,您无法真正按顺序存储int 对象列表,这些对象在Python 中具有可变大小。所以检查sys.getsizeof(0),然后是sys.getsizeof(1),最后是sys.getsizeof(10000000000000000)

标签: python python-3.x list memory


【解决方案1】:

不,python 列出存储对象的引用(“指针”)

Performance Notes#

列表对象由两个内部部分组成;一个对象标题,以及 一个单独分配的对象引用数组。后者是 根据需要重新分配。

【讨论】:

  • 非常合乎逻辑的决定。这就是我在没有看到任何说明一种或另一种方式的文档的情况下假设的
【解决方案2】:

python 中的一个空列表需要 72 个字节,所以考虑一下:

ls = [] takes 72 bytes

x = '1234567' takes 44 bytes

现在,这个:

[x] 列表包含字符串 x 占用 124 字节 (72 + 8 + 44)。

但是,你的问题:

[x, x, x, x, x] 包含字符串 x 5 次的列表需要 156 个字节(72 + 5 * 8 + 44)。

这里解释得很好:

https://code.tutsplus.com/tutorials/understand-how-much-memory-your-python-objects-use--cms-25609

【讨论】:

  • python 中的空列表大小为 20。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
  • 2018-12-09
  • 1970-01-01
相关资源
最近更新 更多