#はじめに
Pythonでリストのコピーを行う際に注意することをメモします。詳しい内容は「値渡し・参照渡し」などで検索してみてください。
#注意すること
言葉で説明するよりも先に、以下のコードをご覧ください。
X = 2
Y = X
Y = 5
print('Y = ', Y)
print('X = ', X)
これを実行すると、もちろん
Y = 5
X = 2
という結果が得られます。
次に、以下のコードを実行してみてくだいさい。
i = [1, 2, 3, 4, 5]
j = i
j[0] = 100
print('j = ', j)
print('i = ', i)
ここでは、iというリストを決め、jにiを代入し、jのインデックス番号0の値を100にし、iとjをそれぞれ出力するものです。その結果は、
j = [100, 2, 3, 4, 5]
i = [100, 2, 3, 4, 5]
となり、 iの方も変更がされてしまいました。
この原因は、次のコードで確かめることができます。
print(id(X))
print(id(Y))
print(id(i))
print(id(j))
4436251808
4436251904
4304286176
4304286176
となり、値を代入したXとYはそれぞれ違うidを持つのに対し、リストを代入したiとjは同じidを持つことがわかりました。そのため、リストではjで行った変更はiにも反映されることになります。
そのため、リストのコピーを行う際は、
j = i.copy()
#最後に
リストをコピーすることは少ないと聞いたので、あまり使用頻度は高くないと思いますが、バグに繋がらないよう、注意してください。