コードで奇妙な状況が見つかりました。問題は次のコードに示されています
import numpy as np
dt = dict(names = ['n1','n2'], formats = ['a8','int'])
reca = np.recarray((10,), dtype = dt)
reca['n1'] = ['a','b','c','d','e','f','g','e','f','g']
reca['n2'] = range(10)
sreca = reca[::2]
print sreca[0] in reca
sreca[0]['n2'] = 12
print sreca[0] in reca
ireca = reca[[1,3,5,7]]
print ireca[0] in reca
ireca[0]['n2'] = 7
print ireca[0] in reca
出力は次のとおりです。
True
True
True
False
私の理解では、新しい値を直接割り当てない限り、sreca
またはireca
参照を保持する必要がありますが、割り当て後に参照を失いました。これが期待されているかどうかはわかりません。reca
ireca
これを回避する方法を教えてもらえますか?
ところで、コードを少し変更するだけで (reca['n1'] = ['a']*10
たとえば) True
、このサンプルのすべてが得られることがわかりました。これには本当に混乱します。