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)


参考网站
reshape仍然是浅拷贝_第1张图片

你可能感兴趣的:(python,python,numpy,开发语言)