python中函数的默认参数是空数组

函数的默认参数 如果为空数组:

def default_para_without_trap(para=[], value=0):
    print(id(para))
    para.append(value)
    print(id(para))
    return para

print('第一步')
print('函数返回值:{}'.format(default_para_without_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_without_trap(value=50)))

结果:

第一步
1652247234376
1652247234376
函数返回值:[100]
第二步
1652247234376
1652247234376
函数返回值:[100, 50]

可以看出指向的都是同一个内存地址,因为数组是可变容器,里面的值发生改变,但指向的内存地址没有发生改变,所以第二次调用的是第一次已经添加了数据的数组。
而不可变数据类型,因为它的值是如果改变了,内存地址也要相应的变化,所以不会存在这种情况。

所以应该在每次调用时初始化

def default_para_without_trap(para=None, value=0):
    print(id(para))
    if para is None:
        para = []
    print(id(para))
    para.append(value)
    print(id(para))
    return para

print('第一步')
print('函数返回值:{}'.format(default_para_without_trap(value=100)))
print('第二步')
print('函数返回值:{}'.format(default_para_without_trap(value=50)))

第一步
1809481008
1743164737352
1743164737352
函数返回值:[100]
第二步
1809481008
1743164737352
1743164737352
函数返回值:[50]

posted @ 2020-12-05 00:02  牛逼如我也要多思考  阅读(670)  评论(0编辑  收藏  举报