答疑:numpy之深拷贝和浅拷贝与原生Python深拷贝与浅拷贝的对比

备注:numpy中的拷贝其实和Python中的拷贝在很多方面都有相同之处,通常可以分为:无拷贝即:赋值操作、浅拷贝、深拷贝三种。

  1. 无拷贝(赋值操作)
  • 原生Python:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述
  • numpy中:
    在这里插入图片描述

总结:无拷贝即,赋值操作时,Python原生赋值和numpy赋值作用相同,均为内存意义上的指向,即:引用的传递。

  1. 浅拷贝
  • Python浅拷贝:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述

从显示结果可以看出,Python原生浅拷贝只拷贝了对象的表层(第一层),并没有对所有层次数据进行拷贝,对于其他层次数据属于引用性质。
当然,此处如果细聊还要对我们内层数据的数据类型进行区分,例如:1.对可变类型数据进行浅拷贝时,会进行正常的浅拷贝;2.对不可变类型数据进行浅拷贝时,仅仅是内存意义上的指向。

  • numpy浅拷贝:
    在这里插入图片描述
    在这里插入图片描述

numpy浅拷贝之后的对象并没有开辟新的内存空间,同时当我修改arr3时,原数据arr,同时也会被修改。

  1. 深拷贝
  • Python原生深拷贝:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述

从输出结果来看,Python原生深拷贝,是对原数据对象,所有层次的拷贝,并开辟新的内存空间保存新的对象,当我修改其中某一对象时,另一对象不受影响。类比于我们原来有一瓶娃哈哈矿泉水A,我们通过深拷贝拷贝了一瓶完全相同的娃哈哈矿泉水B,此时AB分别放在我桌面的左上角和右下角位置(即:开辟了新的内存空间保存我深拷贝之后的娃哈哈矿泉水B),同时当我打开娃哈哈矿泉水A或者B喝上一口,另外一瓶矿泉水不会受影响。

  • numpy深拷贝:
    在这里插入图片描述
    在这里插入图片描述

说明: numpy深拷贝本质上和Python原生深拷贝是类似的,都会开辟新的内存空间去保存深拷贝出来的对象,当我们修改其中某一对象时,另一对象不受影响。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值