深拷贝和浅拷贝

本文详细解释了Python中浅拷贝和深拷贝的概念及应用。浅拷贝只复制第一层对象,共享子对象;而深拷贝则完全复制所有层级的对象。文章通过实例展示了两种拷贝方式的区别,并提供了具体的实现方法。

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

一、浅拷贝

是对于一个对象的顶层拷贝,拷贝引用地址,没有拷贝内容,内存地址一样,共享地址~!

    例子:

a = [1,2,3]

b = [4,5,6]

c = [a,b]

e = c

>>> id(c)

140693012256888

>>> id(e)

140693012256888

clipboard

 

copy.copy

如果是可变类型,只拷贝第一层,id地址不一样,如果是不可变类型,一层都不拷贝直接指向,id地址一样!

 

clipboard

 

clipboard

 

不可变类型:

clipboard

 

clipboard

 

例子:

list1 = [1,2]

list2= list2[:]

list2[0]=1

#list2 变化了,但是list1没有变化,id执行地址不同(只拷贝一层),也是浅拷贝

print(id(list1),id(list2))

#如果有了子列表

list3=[3,4,[1,2]]

list4=list3[:]

list4[2][0]=111

#内存地址还是不一样,因为只拷贝一层,有共同指向子列表,所以list4的子列表变化了,list3的子列表变化了。

 

以下操作会会出现浅拷贝的情况

  • 使用切片[:]操作
  • 使用工厂函数(如list/dir/set)
  • 使用copy模块中的copy()函数

 

二、深拷贝

1、深拷贝

另外创建一份内容出来,id地址不一样。

clipboard

 

clipboard

 

深拷贝:copy.deepcopy()

转载于:https://www.cnblogs.com/sunjingjingking/p/9231181.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值