2016-05-10 27 views
2

我知道我们在Python传递参数时传递一个对象的引用。Python:列表参数传递

所以,

def changer(b): 
    b[0] = "spam" 

l = [1,2] 
changer(l)    # l is now ["spam",2] 

但是,如果我这样做,

changer(l[:])   # l remains [1,2] 

什么是传递给函数在第二种情况下,当我通过列表中分得一杯羹?

+4

您将在第二个示例中传递'l'的副本。 – Selcuk

+0

请注意,此行为不是函数调用所独有的。你可以看到同样的事情发生,如果你做'l = [1,2]; b = 1 [:]; b [0] =“垃圾邮件”;打印(升); print(b)' – Kevin

回答

1

l[:]创建副本。看切片。拷贝被传入函数,函数修改l的拷贝。因此,我将保持不变。

所有切片操作都会返回一个包含请求的 元素的新列表。这意味着下一个切片将返回一个新的(浅) 列表副本。

+2

我会将“拼接”改为“切片”。拼接列表时,通常会在原地进行编辑,删除拼接的部分。在切分列表时,可以不改变原始列表。这也与内置的“切片”一致。 –

+0

好点...谢谢。 – mattsap