Python深拷贝和浅拷贝的区别

浅拷贝只会使列表的id地址发生改变,则一个列表的变化不会影响另一个列表的变化,但是子列表的id并没有被改变,因此,子列表的值会随着一个列表的变化而变化。浅拷贝可以使用copy()函数、或者copy模块的copy()函数。
深拷贝会使列表的id地址发生改变,则一个列表的变化会影响另一个列表的变化,而且子列表的id也会被改变,因此,一个列表的子列表中值的变化,并不会影响另一个列表的子列表。深拷贝只能使用copy模块的deepcopy()函数。

通过如下代码可以充分反映深拷贝和浅拷贝的区别,以及引用的区别。

'''
---** coding by utf-8 **---
作者:hui
时间:2020年-08月-11日
'''
import copy
a=[10,20,30,['zhangsan','lisi']]
b=a
#此时a,b两个列表指向同一片内存地址,子列表也指向同一片内存地址,a,b列表是一个东西
print(a)
print(id(a))#26887272
print(id(b))#26887272
print(id(a[3]))#26888152
print(id(b[3]))#26888152
c=copy.copy(a)#浅拷贝所生成的对象的Id不同,但是子列表的id相同,因此,修改a会影响c,但是修改a的子列表,c的子列表也会发生变化
d=copy.deepcopy(a)#深拷贝所生成的对象的Id不同,子列表的id也不相同,因此,修改a会影响c,修改a的子列表,c的子列表不会发生变化
a.append(80)
a[3].append("yishan")
print(c)#[10, 20, 30, ['zhangsan', 'lisi', 'yishan']]
print(id(c))#15910832
print(id(c[3]))#26888152
print(d)#[10, 20, 30, ['zhangsan', 'lisi']]
print(id(d))#26887592
print(id(d[3]))#26888192

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值