python 函数中有空列表
面试题
def expendList(val,list=[]):
# 默认列表在函数定义的时候被创建一次
# 带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。
list.append(val)
return list
list1 = expendList(10)
list2 = expendList(123,[])
list3 = expendList('a')
'''
因此list1和list3是在同一个默认列表上进行操作(计算)的。 浅拷贝
而list2是在一个分离的列表上进行操作(计算)的。(通过传递一个自有的空列表作为列表参数的数值)
'''
print(list1)
print(list2)
print(list3)
'''
结果:
[10, 'a']
[123]
[10, 'a']
'''
在返回的时候 通过深拷贝
import copy
def expendList(val,list=[]):
# 默认列表在函数定义的时候被创建一次
# 带有默认参数的表达式在函数被定义的时候被计算,不是在调用的时候被计算。
list.append(val)
return copy.deepcopy(list)
list1 = expendList(10)
list2 = expendList(123,[])
list3 = expendList('a')
结果:
[10]
[123]
[10, 'a']
通过下面的修改
def expendList(val,list=None):
if list is None:
list = []
list.append(val)
return list
list1 = expendList(10)
list2 = expendList(123,[])
list3 = expendList('a')
print(list1)
print(list2)
print(list3)
'''
结果:
[10]
[123]
['a']
'''
参考:
https://segmentfault.com/a/1190000006265256
http://blog.csdn.net/zhangqi_gsts/article/details/50617340
http://blog.csdn.net/xfyangle/article/details/56833141