如何为列表分配工作内存?

时间:2016-06-02 18:04:15

标签: python list memory python-internals

我正在尝试使用python,我发现了一个关于列表对象的内存大小的奇怪行为。我试图找到答案,但我没有。

我使用 ipython Python 2.7.11 +。

这是我试图解释的现象:

In [1]: list_A = ["hello", "world"]

In [2]: list_B = "hello world".split(" ")

In [3]: list_A == list_B
Out[3]: True

In [4]: from sys import getsizeof

In [6]: getsizeof(list_A)
Out[6]: 88

In [7]: getsizeof(list_B)
Out[7]: 168

In [8]: list_C = list(list_A)

In [9]: list_D = list(list_B)

In [10]: getsizeof(list_C)
Out[10]: 112

In [11]: getsizeof(list_D)
Out[11]: 112

所以我理解C部分更容易预先分配比避免许多realloc所需的更多空间。

我不明白的是预先分配的空间是如何运作的?

看起来如果你不使用list()函数来创建列表,它就需要完全占用的空间。 (“你好”和“世界”大小为42 +正常列表内存开销)

如果它是通过拆分创建的,那么它似乎预先分配更多。

如果我对它们调用list(),它会为新元素预分配足够的内容吗?

是否也意味着对于内存优化,在使用拆分的情况下,获取预分配内存的最佳方法是重新创建列表?

提前多多感谢!

编辑:我希望在答案中得到更多答案。但我发现Python源代码很好。

0 个答案:

没有答案