关于python:列表是按值传递还是按引用传递?

Is list pass by value or by reference?

本问题已经有最佳答案,请猛点这里访问。

考虑下面的代码,乍一看它做的是相同的事情,但结果不同,有时它似乎列表是传递值,有时列表似乎是传递引用:

1
2
3
4
5
6
7
8
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)

有人能告诉我发生了什么事吗?


它是通过引用值传递的。因此,对对象的修改可以在函数外部看到,但是将变量分配给新对象不会改变函数外部的任何内容。

它与在C中传递指针或Java中的引用类型基本相同。

+=情况的结果是因为该运算符实际上在适当的位置修改了列表,所以效果在函数之外是可见的。lst.append()也是一个就地操作,这解释了您最后一个案例。