操作和修改数组时,他们的数据有时被复制到一个新的数组中有时候没有,这很容易让人误解。
下面举三个例子:
1.No copy at all (一点也没有复制)
import numpy as np
a = np.arange(12)
b = a #并没有新的对象被创建,a和b只是相同ndarray对象的两个名字而已,下面用id()来验证一下
print(id(a),id(b))
可见a和b指向同一个数据对象。
2.View or Shallow Copy
c = a.view() #method of numpy.ndarry instance numpy.ndarry实例的方法
以下可见c = a.view()创建了一个新的对象,但是这两个对象共享相同的数据。
如上所见,对象c和a都可以对数据的数值进行修改,但是c不能对shape属性进行修改。
另外切片数据也会返回“视图”对象。
s[:]是s的一个视图
3.Deep Copy(深度复制)
d = a.copy() #a new array object with new data is created
本文来自https://docs.scipy.org/doc/numpy-dev/user/quickstart.html开源社区,里面有完善的文档,取之不尽的资源。大家可以多去访问开源社区。