Python基础——深拷贝+浅拷贝

本文深入探讨了深拷贝与浅拷贝的区别,解释了它们在Python中的实现方式,包括使用切片和copy模块。通过示例代码展示了拷贝过程中可能出现的问题,以及如何避免这些潜在错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

深拷贝 浅拷贝

都是拷贝,不存在快捷方式
——目的:避免一些隐藏的错误

——比如这样的代码:

# 传入的list为dd1 = dd[:]
# 这样改变dd1就不会改变dd的值
def func(l):
 	l.append(4)
 	l[3].append(5)
my_list = [1,2,3,[]]
func(m_list[:])
print(my_list)
  • 浅拷贝:

    • list = list[:] —— 切片操作

    • 是指重新分配一块内存,如果源对象不可变,深还是浅都一样

    • 只拷贝了外边的壳子

    • 源对象

    • b = copy.copy(a)

    • list【list】,(对于可变的数据)浅拷贝可能会有副作用

    • 不可变的数据类型,保存的地址是一样的:在这里插入图片描述

    • # tuple是不可变数据结构(体现在id上)
      >>>1 True True
      2 True True
      3 True True
      
  • 深拷贝:

    • b = a
    • 里里外外都拷贝进去了
    • 以递归的方式查找,所以也会出现一些问题
a == b:a is b
判断a和b分别的value判断分别的id值(少用)
元组里列表的值变=元组变》=-255 & 《 =256 (大小可缓存的)

代码问题:
C:\Users\hp\AppData\Roaming\Typora\typora-user-images\1566287143250.png

存储角度看:
C:\Users\hp\AppData\Roaming\Typora\typora-user-images\1566287127416.png

两个list的地址是不一样的。
[外链图片转存失败(img-C1szDdKx-1568106774846)(C:\Users\hp\AppData\Roaming\Typora\typora-user-images\1566287209819.png)]

append后,first里的子列表会又多了一个5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值