Python

【Python】リストや辞書をコピーしたいけどできない!?

配列をコピーしてるはずなのにできてない??

以下のコードをみてください。

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言語をやってみると、理解が深まるかもしれません。

COMMENT

メールアドレスが公開されることはありません。