python学习--浅拷贝(shallow copy)与深拷贝(deep copy)区分

一 浅拷贝与深拷贝区分
打开网址 https://docs.python.org/3.7/library/copy.html
或者在python的交互界面输入 help(copy)语句可以打开拷贝的英 文文档解析,如下所示:
在这里插入图片描述第一个红色方框:copy.copy(x) 返回x的浅拷贝;
copy.deepcopy(x) 返回x的深拷贝;
浅拷贝:,构造一个新的复合对象,然后将引用插入到原始对象中。
①浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内 存地址。
②浅拷贝只拷贝一层,仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅复制出来的对象也会相应的改变。更深层次对象级别的,浅拷贝只拷贝引用。

深拷贝: 构造一个新的复合对象,然后递归地将在原始对象中找到的副本插入其中。
①深拷贝开辟一块新的内存地址用于存放复制的对象。
当拷贝的内容仅仅只有一层内容时,浅拷贝与深拷贝作用相同。

二 示例
以列表为示例:
(1)当拷贝内容只有一层时
浅拷贝与深拷贝,使用结果形同。在这里插入图片描述
如图所示:当仅有一层时:
列表a1含有四个元素,a2、a3分别为浅拷贝、深拷贝。
复制列表内容相同,但地址(id)不同,说明a1、a2、a3为不同列表。改变a1[0], a2[0]、a3[0]均不发生变化。
(2)当拷贝内容多层时
在这里插入图片描述
如图所示:当列表含有多层时:
列表b1含有四个元素,b2、b3分别为浅拷贝、深拷贝。
复制列表内容相同,但地址(id)不同,说明b1、b2、b3为不同列表。改变b1[0], b2[0]、b3[0]均不发生变化,验证上(1)正确。
交换b1[3]位置上列表的内容,b2[3]位置处发生一起变化,说明浅拷贝仅仅只能够复制一层的内容,多层则复制引用,其地址上的内容不发生改变。b3[3]位置不变化,说明深拷贝是将所有内容均拷贝完全。
即浅拷贝只拷贝在第一层,里面内容发生改变,拷贝之后内容也发生改变。
若要创建完全分离的对象、就用深拷贝,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值