考虑以下代码,乍一看它做的是相同的事情,但是结果不同,有时似乎列表是按值传递的,有时列表似乎是按引用传递的:
lst = [1, 2]
def f(lst):
# lst = lst + [3] # seems pass by value
# lst += [3] # strange! same as above but seems pass by reference
lst = lst.append(3) # seems pass by reference
return lst
f(lst)
print(lst)
谁能告诉我发生了什么事?
答案 0 :(得分:3)
通过参考值传递。因此可以在函数外部看到对对象的修改,但是将变量分配给新对象不会在函数外部进行任何更改。
从本质上讲,它与在C中传递指针或在Java中传递引用类型相同。
+=
情况的结果是因为该运算符实际上是modifies the list in place,所以效果在函数外部可见。 lst.append()
也是就地操作,它说明了您的最后一种情况。