列表是按值传递还是按引用传递?

时间:2018-11-24 14:49:26

标签: python list

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

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)

谁能告诉我发生了什么事?

1 个答案:

答案 0 :(得分:3)

通过参考值传递。因此可以在函数外部看到对对象的修改,但是将变量分配给新对象不会在函数外部进行任何更改。

从本质上讲,它与在C中传递指针或在Java中传递引用类型相同。

+=情况的结果是因为该运算符实际上是modifies the list in place,所以效果在函数外部可见。 lst.append()也是就地操作,它说明了您的最后一种情况。