リストの変数使用時の注意点
イミュータル(変更可能)のオブジェクト使用時は注意が必要です。
x=[1,2,3]
y=x
z=x.copy()
y.sort(reverse=True)
print(x,y,z,sep=”\n”)
→ [3, 2, 1] #xの値が変わってしまう
[3, 2, 1] #yの値は逆順で変更
[1, 2, 3] #zはcopyメソッドで別に作った物

あれれ、4行目でyの変数を逆順にしてるだけなのに
結果は元のxの変数も変わってるジャない!
そうなんだリストみたいなミュータブルなオブジェクトを複数の変数に代入し、内容を変えると全部書き換わってしまうんだ。しかしzの変数をみて!元のままだよね。つまりcopy関数を使うと、オリジナルとは別にもう一つ別のオブジェクトを作るから書き換わらないんだ。
つまり、
x=[1,2,3]
y=x.copy()
y+=[4,5]
del y[0:2]
print(x,y,sep=”\n”)
→ [1, 2, 3] #元の要素を変えずに
[3, 4, 5] #yを使い加工できる

加工を失敗しても、元データは変化していないからいから
色んな事が出来ちゃうジャない! グフフ…

コメント