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

posted @ 2017-08-23 18:23  hzxPeter  阅读(535)  评论(0编辑  收藏  举报