为什么Python列表大小在以下两种情况下不同

q19*_*260 2 python list

两个列表都有 3 个元素,但为什么列表大小不同?谢谢!

\n\n
l1.append(1)\nl1.append(2)\nl1.append(3)\nprint\xef\xbc\x88l1.__sizeof__()\xef\xbc\x89 # the size is 72\n\nl2 = [1,2,3]\nprint\xef\xbc\x88l2.__sizeof__()\xef\xbc\x89 # the size is 64\n
Run Code Online (Sandbox Code Playgroud)\n

Bre*_*ler 5

l1.__sizeof__()是 72,但追加另一个元素后仍然是 72。

l1.append(4)
print(l1.__sizeof__()) # prints 72 again
Run Code Online (Sandbox Code Playgroud)

所以看来appending 第一次可能会分配太多空间,并且会用额外的appends 来耗尽该空间。

l1 = []
print(l1.__sizeof__())  # prints 40
l1.append(1)
print(l1.__sizeof__())  # prints 72
Run Code Online (Sandbox Code Playgroud)

4 个元素 - 仍打印 72
5 个元素 - 打印 104

因此,72 - 40 = 32(假设列表对象有 40 个字节的开销)
32/4 = 8(4 个整数的非开销空间)
每个元素 8 个字节。似乎适合 64 位机器。

将其应用于字面定义的列表:

包含 3 个大小为 64 的元素的列表。

64 - 40 = 24 # 从列表大小中删除固定开销大小

24 / 8 = 3 # 将剩余空间除以一个整数的大小

我们正好得到 3 个元素。

是的,字面上定义的列表被分配了它所需的确切空间量。