2016-05-10 84 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