>>> def duplicate(l):
... l = l + l
...
>>> l1 = [1, 2, 3]
>>> duplicate(l1)
>>> l1
[1, 2, 3]
我相信上面的功能重复了这个列表。但为什么结果不是[1, 2, 3, 1, 2, 3]
?
答案 0 :(得分:4)
两个列表对象的连接(与l + l
一样)始终会创建一个新列表对象。在您的函数中,然后将新列表对象分配回 local 变量l
,该变量独立于全局引用l1
。原始列表对象不受影响,因为只复制了列表的内容。
如果你想改变列表对象,你需要自己扩展l
:
def duplicate(l):
l.extend(l)
list.extend()
复制您传入的列表中的所有元素,并将它们添加到您调用它的列表对象的末尾。通过列表本身是安全的;它只会复制原始元素。
演示:
>>> def duplicate(l):
... l.extend(l)
...
>>> l1 = [1, 2, 3]
>>> duplicate(l1)
>>> l1
[1, 2, 3, 1, 2, 3]