def f(x=[ ]):
x +=[3]
return x
print(f()+f())
print(f())
输出:
First:
[3,3,3,3]
第二版:
[3,3,3]
发布于 2018-04-12 03:50:35
由于python的默认参数,因此在程序启动时只能绑定一次。因此,对于f()
的第一个调用,它返回[3]
并更改x引用[3]
的数组。
所以
print([3]+f())
print(f())
然后,对f()
的第二个调用,因为[]
已经更改为[3]
,结果将是[3,3]
,引用下的数组也将被更改。
所以
print([3,3]+[3,3])
print(f())
类似于下一行。它将返回[3,3] + [3]
print([3,3]+[3,3])
print([3,3,3])
你就是这样得到它的。
发布于 2018-04-12 03:48:29
f()+f()
的输出之所以是[3,3,3,3]
,是因为将相同的对象x
添加到自己中。
让我们把它分解:
在第一次调用f()
-> x=[3]
之后。
在第二次调用f()
-> x=[3,3]
之后
现在f()+f()
= x+x
= [3,3] + [3,3]
= [3,3,3,3]
也许演示的一种方法是修改函数以打印id(x)
。
def f(x=[ ]):
x +=[3]
print(id(x))
return x
print(f()+f())
#4370444584
#4370444584
#[3, 3, 3, 3]
如果希望它输出[3,3,3]
,则必须让函数返回x
的副本
def f(x=[ ]):
x +=[3]
return [val for val in x]
print(f()+f())
#[3,3,3]
https://stackoverflow.com/questions/49787617
复制相似问题