"append" 在函数外对我的参数做了什么?

What did "append" do to my parameter outside the function?

举个简单的例子:

def change(a,b=[]):
    a+=1
    b.append(1)
A = 1
B = []

猜猜如果我们会发生什么:

change(A,B)
print(A, B)

2 [1]

函数外的参数B,已更改!

但为什么 b.append(1) 会影响函数外的参数?

Python 列表是对象(就像 python 中的其他所有内容一样)。当您将列表传递给函数时,您实际上是在传递对列表实例的引用(与存储在 B 中的实例相同)。 append 是一个列表的方法,它将一个对象追加到列表实例中。由于 Bb 都指向同一个列表实例,因此只有一个实例会更新。

正如@Daniel Hao 所说,您可以找到臭名昭著的问题的详细解释here

you should:

def append_to(element, to=None):
    if to is None:
        to = []
    to.append(element)
    return to