reshape仍然是浅拷贝

今天coding的时候发现未知bug;
排查后发现是改变了reshape赋予对象带来的。
我印象中reshape复制前后两个对象是独立的,在内存里是两个不同的块,是自带深拷贝的(以前print过id看过); 但是结论是错的,reshape只是给了不同的view,id不同,.data不同,但是.ctypes.data(数据内存地址)是相同的,所以改变一个会相应改变另一个

且看code:

>>> import numpy as np
>>> a = np.array([1,2,3])
>>> b = np.reshape(a,[3,1])
>>> a
array([1, 2, 3])
>>> b
array([[1],
       [2],
       [3]])
>>> b[0,0]=999
>>> b
array([[999],
       [  2],
       [  3]])
>>> a  #改变b也会改变a
array([999,   2,   3])
>>> a.ctypes.data==b.ctypes.data
True
>>> a.data==b.data
False
>>> id(a)==id(b)


参考网站
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值