所以,这是一段代码:
def function(item, stuff = []):
stuff.append(item)
print stuff
function(1)
# print '[1]'
function(2)
# print '[1,2]'
据我所知,这表明,在程序运行期间更改的默认值在每次函数调用时仍然会更改。但为什么这段代码:
def function(item, stuff = 0):
stuff += item
print stuff
function(3)
function(3)
每次跑步都打印'3'?
答案 0 :(得分:2)
Python中的列表 mutable :它们可以在创建后进行修改。这就是当你调用第一个函数时stuff
列表增长的原因,每次都是相同的列表对象。
另一方面,整数是不可变的。创建它们后,您无法更改它们。这是做什么的
a = 2
a += 1
是从“2”对象中删除a
标签,然后将其附加到“3”对象。
这就是“0”对象(第二个函数的stuff
参数的默认值)保持不变并且每次都得到3的原因。