两个列表都有 3 个元素,但为什么列表大小不同?谢谢!
\n\nl1.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\nRun Code Online (Sandbox Code Playgroud)\n
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 个元素。
是的,字面上定义的列表被分配了它所需的确切空间量。