10.Pyhon中深拷贝和浅拷贝

  • 浅拷贝的意思: 不会开辟内存,只是 增加指针而已, 当没有指针指向内存就垃圾回收
  • 深拷贝的意思: 开辟两块内存,指针指向各自的内存

1.浅拷贝(=)

  • 浅拷贝是一种对于对象的顶层拷贝;
  • 即为拷贝了引用指向同一个地址;

看下面代码理解一下:

a=[11,22,33]

b=a   #浅拷贝
 

print(b)  #[11, 22, 33]
print(id(a))  #8530480
print(id(b))  #8530480

a.append(44)   #追加一个元素
print(a)    #[11, 22, 33,44]
print(b)   #[11, 22, 33,44]


可以看出使用等号只能进行浅拷贝,即拷贝后两个对象指向了相同地址,追加元素后由于也是指向了相同地址,因为值也是相同;

在这里插入图片描述

2.深拷贝(deepcopy)

  • 深拷贝即对所有层级的拷贝,指向的地址不同;

看下面代码理解一下:

import copy

a=[11,22,33]

c=copy.deepcopy(a)  #进行深拷贝

print(a)  [11, 22, 33]
print(id(a))    #4029016 
print(id(c))    #4027896

a.append(44)   #追加一个元素
print(a)    #[11, 22, 33,44]
print(c)   #[11, 22, 33]

深拷贝需要导入模块copy,使用deepcopy()方法进行深拷贝,拷贝后指向地址不同,因为给被拷贝对象添加元素也不会影响到拷贝后的元素;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值