Numpy Tips 1 : イミュータブルなnumpy array

python にはc++constの役割を果たす機能はないが、

constの完全な代替にはならないものの、

numpyなら以下のようにndarray.flagsを設定することでimputable arrayを実現することができる。

a = np.arange(5)
a.flags.writeable = False #a.flags["WRITABLE"]=False is also ok 
a[0] = 1
#ValueError: assignment destination is read-only

また以下のメソッドが同等の効果をもつ

a.setflags(write=False)

ただしこれはあくまでnumpyの配列変更を禁止するだけで、numpy自体の型変換はできてしまう。 すなわち、以下の代入は許される

a=1
type(a)
#int

cf. Python におけるside effectがないプログラミング(いわゆる関数プログラミング) の良し悪しについては、 5. Functions — Beginning Python Programming for Aspiring Web Developers などを参照