【发布时间】:2019-03-24 09:57:15
【问题描述】:
Python 解包不起作用
a = [1,2,3,4]
*m = a; //error
b,*m = a
print(m) //working
请解释为什么前一个不起作用。
【问题讨论】:
-
如果
*m有效,它只会复制列表并且已经有语法。 -
如果您将
*m = a; //error(由于Python 中的cmets 以#开头而导致语法不正确)更改为*m = a #error,则会出现另一个语法错误来解释问题:SyntaxError: starred assignment target must be in a list or tuple。在这种情况下,您可以只使用m = a[:]来获取所有a的副本。 -
@SuperShoot 公平地说,有多个选项用于浅拷贝列表,包括:
m = a[:]、m = a.copy()、m = copy.copy(a)、m = list(a),m = [x for x in a],是的,*m, = a。 -
@jonrsharpe 正确,
*m不是其中之一。 -
@SuperShoot 这是真的,但不是你的论点。该 PEP 引入了两种新方法来浅拷贝列表,尽管这些方法已经存在。
标签: python python-3.x unpack