我正在尝试使用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源代码很好。