python中的深浅拷贝的区别

本文详细解析了Python中列表操作的常见问题,包括如何正确地从列表中移除元素,以及深拷贝和浅拷贝的区别。通过实例展示了在修改列表时可能出现的下标错乱问题,并提供了使用深拷贝避免这一问题的方法。
li = [1,1,2,3,4,5,6,7,8,9]
l2=li # 这样定义不行共用内存空间,其实是一体
# l2 = [1,1,2,3,4,5,6,7,8,9]
l3=li[:]
for i in l2:
if i%2!=0:
li.remove(i)
print(li) # [1, 2, 4, 6, 8]
print(id(li)) # 获取内存地址,li、l2 li=l2 是相同的内存地址
print(id(l2))
print(id(l3))
# 循环删除list的时候,都会出现这样的问题
# 循环的时候,不要删除元素,下标会错乱
# 解决的方法是利用两个list,循环不变的list
# 深拷贝 l2=li[:] 两个不同的内存地址,互不影响 两个不同的内存地址
# 浅拷贝 l2=li 互相影响 两个的内存地址相同
import copy

d={'name':'xiaohei','l':[4,5,6]}
d1=d #浅拷贝 和copy.copy的方法一样,虽然copy的ip内存地址不同,但是最里面的一层【】做不了深拷贝
d2=copy.deepcopy(d) # 深拷贝
d1['l'].append('8')
d2['sex']='女'
d1['age']=18

print(d) #{'name': 'xiaohei', 'l': [4, 5, 6, '8'], 'age': 18} #浅拷贝的影响,深拷贝不影响

转载于:https://www.cnblogs.com/skyxiuli/p/10741119.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值