再配列をコピーして、新しい配列のフィールド/レコードの名前を変更しようとしています。ただし、これにより元の配列の名前が変更されます (ただし、値はリンク解除されません)。例:
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')
2 番目のコピー
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')