目次
配列をコピーしてるはずなのにできてない??
以下のコードをみてください。
x = [1,2,3,4,5]
y = x
y[0] = "先頭"
print(x)
print(y)
このコードを実行すると、
>>> [“先頭”, 2, 3, 4, 5]
>>> [“先頭”, 2, 3, 4, 5]
あれ!?
変数yだけ変更したいのに、変数xも変更されてる。
実は、変数を渡すときの方法として、
値渡しと参照渡しというものがあります。
簡単に違いを説明すると、
・値渡し :変数をコピーするような渡し方。
・参照渡し:変数を共有するような渡し方。
もっと詳しく知りたい方は、以下の記事をご覧ください。
値渡しと参照渡しの違い
今回の場合、参照渡しされてるのが原因ということですね。
解決:値渡しをする
結論からいうと、copyメソッドを使います。
x = [1,2,3,4,5]
y = x.copy()
y[0] = "先頭"
print(x)
print(y)
>>> [1, 2, 3, 4, 5]
>>> [“先頭”, 2, 3, 4, 5]
実行すると、変数yだけに代入されてることが確認できると思います。
プログラミング初心者には意外と盲点だと思います、僕もつまずいた記憶があるので、改めて記事にしました。
C言語をやってみると、理解が深まるかもしれません。