numpy.copy #

麻木的。复制( a , order = 'K' , subok = False ) [来源] #

返回给定对象的数组副本。

参数
类似数组

输入数据。

顺序{'C', 'F', 'A', 'K'},可选

控制副本的内存布局。 'C' 表示 C 阶,'F' 表示 F 阶,如果a是 Fortran 连续的,'A' 表示 'F',否则为 'C'。 'K' 表示尽可能匹配a的布局。 (请注意,此函数 和ndarray.copy非常相似,但其 order= 参数具有不同的默认值。)

subok布尔,可选

如果为 True,则子类将被传递,否则返回的数组将被强制为基类数组(默认为 False)。

1.19.0 版本中的新增内容。

返回
数组

的数组解释。

也可以看看

ndarray.copy

创建数组副本的首选方法

笔记

这相当于:

>>> np.array(a, copy=True)  

例子

创建一个数组 x,带有引用 y 和副本 z:

>>> x = np.array([1, 2, 3])
>>> y = x
>>> z = np.copy(x)

请注意,当我们修改 x 时,y 会改变,但 z 不会改变:

>>> x[0] = 10
>>> x[0] == y[0]
True
>>> x[0] == z[0]
False

请注意,np.copy 清除先前设置的 WRITEABLE=False 标志。

>>> a = np.array([1, 2, 3])
>>> a.flags["WRITEABLE"] = False
>>> b = np.copy(a)
>>> b.flags["WRITEABLE"]
True
>>> b[0] = 3
>>> b
array([3, 2, 3])

请注意,np.copy 是浅复制,不会复制数组中的对象元素。这对于包含 Python 对象的数组非常重要。新数组将包含相同的对象,如果该对象可以修改(可变),则可能会导致意外:

>>> a = np.array([1, 'm', [2, 3, 4]], dtype=object)
>>> b = np.copy(a)
>>> b[2][0] = 10
>>> a
array([1, 'm', list([10, 3, 4])], dtype=object)

要确保object复制数组中的所有元素,请使用copy.deepcopy

>>> import copy
>>> a = np.array([1, 'm', [2, 3, 4]], dtype=object)
>>> c = copy.deepcopy(a)
>>> c[2][0] = 10
>>> c
array([1, 'm', list([10, 3, 4])], dtype=object)
>>> a
array([1, 'm', list([2, 3, 4])], dtype=object)