我知道我们在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