今天在练习function时,发现在不同情况下,
function的默认值会不同
例.
def spam(a,b=40):
print(b)
return b
def spam_2(a,b=[]):
print(b)
return b
//v1
x = spam(1)
x = 100
x = spam(1)
// result : 40 , 40
//v2
x = spam_2(1)
x.append('hello')
x = spam_2(1)
// result : [] , ['hello']
这个结果和我原先想像的不一样,
后来看memory address的差异时发现,
v1在 x = 100 后, x的memory address和spam回传的address不同
v2在 x.append('hello')后,x的memory address和spam_2回传的address相同
我的理解是 python的每个值都是object
赋值是改变address
所以x=40,是把x只向另一个address
而.append是对现有的object做改变
所以x.append('hello'),是更改现在address内的值
想请问大家,这样的解释是否正确?还是有其他的解释呢?