关于numpy及list的深拷贝理解

建议先看:https://blog.csdn.net/xidianliutingting/article/details/51682867
讲的很好。我会在上面进行补充。
以前一直知道有这个概念,但是由于一直没有遇到便没有在意,当在写momentum优化梯度代码时,又一次遇到了,所以决定梳理一下。
都知道copy是深拷贝,那么它到底能干吗?什么时候会用到?
来看:

a = []
x = np.array([1])
for i in range(10):
    a.append(x)
    x+=1
a

你能正确说出a是什么样子的嘛?由于一开始append的是1,然后再加1,就是append的2.以此类推。那么a应该是递增的numpy数。然而:
在这里插入图片描述
它是这样的。为什么呢?因为虽然x不断自加1,而且列表不断添加新元素,但是添加的一直是x的视图,意思是其实x就一个地址,一直没变。你一直添加x,而x就一个地址啊,所以都是一样的。
这时就需要x.copy()了,深复制,你x再自加,和我的备份copy没有关系。他们不会互相影响,也就不是一个地址了。如下
在这里插入图片描述
当然,列表也类似。但又不同,建议看文章开头的链接。
这是开头链接的截图:
在这里插入图片描述
同时补充下,list也有.copy()的属性,和切片类似也是深拷贝。
在这里插入图片描述
在这里插入图片描述
最后补充下,你平常见到的可能是这样的:

a = []
x = 1
for i in range(10):
    a.append(x)
    x+=1
a

整数自加,再不断添加到列表a里,这时输出你不用担心:
在这里插入图片描述
只是因为np数组和列表都是特殊的数据结构,所以才会比较不同。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值