为什么sys.getsizeof为非常大的列表返回相同的输出

时间:2016-12-07 06:16:38

标签: python python-3.x memory

python版本: Python 3.6.0b3(默认,2016年11月16日,16:55:09)

我有以下输出:

>>> sys.getsizeof([0 for x in range(10**7)])
81528056
>>> sys.getsizeof([0 for x in range(10**8)])
859724472
>>> sys.getsizeof([0 for x in range(10**8+100500)])
859724472
>>> sys.getsizeof([0 for x in range(10**9)])
8058558880

Length of lists:
>>> len([0 for x in range(10**8)])
100000000
>>> len([0 for x in range(10**8+100500)])
100100500
>>>

为什么我对len列出的列表具有相同的getsizeof输出: 10**810**8+100500

2 个答案:

答案 0 :(得分:3)

list is resized长度增加a bit more than 1/8 of the requested length时。 100500远小于10 ** 8的1/8,这意味着该列表可能不需要从之前的调整大小调整大小以适应新条目。

答案 1 :(得分:0)

sys.getsizeof以字节显示大小。您的[0 for x in range(10 ** 8 ...)]的列表都可以用859724472字节显示。