我知道我們在Python傳遞參數時傳遞一個對象的引用。Python:列表參數傳遞
所以,
def changer(b):
b[0] = "spam"
l = [1,2]
changer(l) # l is now ["spam",2]
但是,如果我這樣做,
changer(l[:]) # l remains [1,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]
什麼是傳遞給函數在第二種情況下,當我通過列表中分得一杯羹?
l[:]
創建副本。看切片。拷貝被傳入函數,函數修改l的拷貝。因此,我將保持不變。
所有切片操作都會返回一個包含請求的 元素的新列表。這意味着下一個切片將返回一個新的(淺) 列表副本。
我會將「拼接」改爲「切片」。拼接列表時,通常會在原地進行編輯,刪除拼接的部分。在切分列表時,可以不改變原始列表。這也與內置的「切片」一致。 –
好點...謝謝。 – mattsap
您將在第二個示例中傳遞'l'的副本。 – Selcuk
請注意,此行爲不是函數調用所獨有的。你可以看到同樣的事情發生,如果你做'l = [1,2]; b = 1 [:]; b [0] =「垃圾郵件」;打印(升); print(b)' – Kevin