函数形参默认值容易产生的误区
注意:函数在加载时候,会创建默认值,如果这个默认值是一个可变对象,那么要注意以下坑。
def func(val, list=[]): # 函数在加载的时候会创建list的默认列表,其他调用这个函数的时候,如果没有传递新的list,那么会共用同一个list。 print(id(list)) list.append(val) return list # 此处list1和list3在调用函数的时候,发现函数体内部的默认list的内存地址相同,所以最后print(list1)的时候,里面有两个值 list1 = func(10) list2 = func(123, []) # 此处传递给函数func了一个实参[],此时发现函数体内部的list的内存地址发生了变化。 list3 = func('a') print('list1=%s' % list1) # [10,"a"] print('list2=%s' % list2) # [123] print('list3=%s' % list3) # [10,"a"]