def append_to_mylist(item, my_list=[]):
my_list.append(item)
return my_list
print(append_to_mylist(1))
print(append_to_mylist(1))
print(append_to_mylist(1))
print(append_to_mylist(1, []))
print(append_to_mylist(1))
print(append_to_mylist(1))
print(append_to_mylist(1))
print("=" * 50)
def append_to_mystr(item, my_str=""):
my_str += item
return my_str
print(append_to_mystr("1"))
print(append_to_mystr("1"))
print(append_to_mystr("1"))
"""
输出:
[1]
[1, 1]
[1, 1, 1]
[1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1]
==================================================
1
1
1
"""
"""
1.默认参数只在函数加载时,执行一次默认值生成和赋值,并且在被回收前,这个值会一直存在于内存.
后续调用函数,不会对默认参数进行再次赋值,即使主动传参给默认参数,也不会引起默认参数重新赋值.
2.所以当默认参数加载时,
赋值的是可变类型的时候,就会引起默认参数陷阱,
即在函数角度,自己默认参数指向的默认值一直没变,但是在函数内部可能已经对这个默认值做了修改.
3.对于不可变类型就不存在这个问题,
因为即使默认值每次都是同一个,但是函数内部对默认值的操作会引起新对象的创建和重新引用.
"""