我正在尝试复制一个recarray,并在新数组中更改字段/记录的名称。但是,这会修改原始数组的名称(但值并未取消链接)。例如:
import numpy as np
import copy
定义原始数组
arr = np.array(np.random.random((3,2)),
dtype=[('a','float'),('b','float')])
第一份副本
arr2 = arr.copy()
arr2.dtype.names = ('c','d')
arr.dtype.names
--> ('c','d')
第二份拷贝
arr3 = copy.deepcopy(arr2)
arr2.dtype.names = ('e','f')
arr.dtype.names
--> ('e','f')
为什么会发生这种情况,如何防止它发生?我怀疑 dtype 是一个单独的列表/对象,其引用在 copy() 时被复制,但即使我将 dtype 对象的深拷贝分配给原始数组,我仍然得到相同的结果:
dt = copy.deepcopy(arr.dtype)
arr.dtype = dt
arr3.dtype.names = ('g','h')
arr.dtype.names
--> ('g','h')