Rom*_*sky 6 python iterable list python-3.x python-internals
有没有之间的任何实际的差别list(iterable),并[*iterable]在支持后者的Python版本?
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] 可能会稍微更有效率,但稍微如此。