列表和函数参数

时间:2015-11-10 02:34:53

标签: python

>>> def duplicate(l):
...     l = l + l
...
>>> l1 = [1, 2, 3]
>>> duplicate(l1)
>>> l1
[1, 2, 3]

我相信上面的功能重复了这个列表。但为什么结果不是[1, 2, 3, 1, 2, 3]

1 个答案:

答案 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]