是什么导致[* a]整体化?

问题描述 投票:12回答:2

显然list(a)不会整体化,[x for x in a]在某些点上整体化,而[*a]整体化一直”>?]]

Sizes up to n=100

这里是从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这样计算,reproducable at repl.it8

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之类的东西?源代码在哪里?

((产生图像的Colab with data and code。]

放大到较小的n:

Sizes up to n=40

放大到较大的n:

Sizes up to n=1000

显然,list(a)不会汇总,[a中的x表示x]在某些点上累计,而[* a]一直都汇总?这是从0到12的大小n,三个字节的结果大小(以字节为单位)...

python python-3.x list cpython python-internals
2个回答
0
投票

[[*a]正在内部执行:

  1. 新建一个空的list

0
投票

这些将是CPython解释器的实现细节,因此在其他解释器之间可能不一致。

© www.soinside.com 2019 - 2024. All rights reserved.