在Python 3.5+中list()vs iterable unpacking

Rom*_*sky 6 python iterable list python-3.x python-internals

有没有之间的任何实际的差别list(iterable),并[*iterable]在支持后者的Python版本?

Ste*_*ppo 5

list(x)是函数,[*x]是表达式。您可以重新分配list,并使其执行其他操作(但您不应该这样做)。

谈到 cPython,b = list(a)转换为以下字节码序列:

LOAD_NAME                1 (list)
LOAD_NAME                0 (a)
CALL_FUNCTION            1
STORE_NAME               2 (b)
Run Code Online (Sandbox Code Playgroud)

相反,c = [*a]变成:

LOAD_NAME                0 (a)
BUILD_LIST_UNPACK        1
STORE_NAME               3 (c)
Run Code Online (Sandbox Code Playgroud)

所以你可以争辩说这[*a] 可能会稍微更有效率,但稍微如此。