def func(list1=[]):
list1.append(2)
print(list1)
print(id(list1))
print("--------")
func([1])
func([1])
func()
func()
func()
输出:
[1, 2]
1850503275720
--------
[1, 2]
1850503275720
--------
[2]
1850503275912
--------
[2, 2]
1850503275912
--------
[2, 2, 2]
1850503275912
--------
可以看出,当列表,字典作为函数参数时,地址不会发生改变,如果调用时传递了新的参数,则使用新的参数,如果没有传递则使用默认的列表作为参数。
list并不在函数调用结束后就释放资源。当它作为函数参数时,相当于全局变量,在函数预处理时就已经分配了内存空间。