最佳答案
很明显,list(a)
没有过度分配,[x for x in a]
在某些点上过度分配,而 [*a]
过度分配 一直都是?
下面是从0到12的大小 n 以及这三个方法的大小(以字节为单位) :
0 56 56 56
1 64 88 88
2 72 88 96
3 80 88 104
4 88 88 112
5 96 120 120
6 104 120 128
7 112 120 136
8 120 120 152
9 128 184 184
10 136 184 192
11 144 184 200
12 152 184 208
这样计算,可复制,使用 Python 3。 8:
from sys import getsizeof
for n in range(13):
a = [None] * n
print(n, getsizeof(list(a)),
getsizeof([x for x in a]),
getsizeof([*a]))
那么: 这是如何工作的?[*a]
如何超配?实际上,它使用什么机制来从给定的输入创建结果列表?它是否在 a
上使用迭代器并使用类似于 list.append
的东西?源代码在哪?
(产生图像的 与数据和代码合作。)
放大到更小的 n:
放大到更大的 n: