"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
是一个列表的方法,它将一个对象追加到列表实例中。由于 B
和 b
都指向同一个列表实例,因此只有一个实例会更新。
正如@Daniel Hao 所说,您可以找到臭名昭著的问题的详细解释here
you should:
def append_to(element, to=None):
if to is None:
to = []
to.append(element)
return to
举个简单的例子:
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
是一个列表的方法,它将一个对象追加到列表实例中。由于 B
和 b
都指向同一个列表实例,因此只有一个实例会更新。
正如@Daniel Hao 所说,您可以找到臭名昭著的问题的详细解释here
you should:
def append_to(element, to=None):
if to is None:
to = []
to.append(element)
return to