再谈python的list类型参数及复制

本文介绍了Python中使用列表作为函数参数时的注意事项,包括如何避免因地址传递而导致的实参被意外修改的问题,并提供了深复制的具体实现方法。

由于python的特殊机制,在函数中使用list类型的参数时,实际上虚参与实参是通过地址传递的,即修改虚参的值,实际上就修改了实参的值,非常危险,所以尽量不要修改虚参的值。

在应用中还应该注意,不可以通过等号赋值(所谓浅复制)方式来隔断对虚参的修改,必须通过重新构建list的方式进行赋值(即所谓深复制)。

x1=[1,2]
y1=x1  #浅复制,
print(id(x1),id(y1))   #此时x1,y1地址相同
y1.append(0)           #此时x1,y1均为[1,2,0]
y1=[i for i in x1]     #深复制,利用列表推到式,很方便
print(id(x1),id(y1))   #此时x1,y1地址不同相同
y1.append(0)           #此时x1为[1,2],y1为[1,2,0]

 

转载于:https://www.cnblogs.com/imhuanxi/p/11222878.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值