概要
Pythonの参照渡しでハマってしまった。
なにがおきたか
以下のようなプログラムがあったとする。
wawawa_array = ['wa1','wa2','wa3']
sasasa_array = wawawa_array
sasasa_array[0] = 'sa1'
print(wawawa_array)
print(sasasa_array)
これを実行するとこうなってしまう。
['sa1', 'wa2', 'wa3']
['sa1', 'wa2', 'wa3']
sasasa_array[0]を変更したらwawawa_array[0]の値も変わってしまった。
これはなぜか
Pythonではリストの参照を変数に代入している。
データの存在する場所を変数に渡しているため、このような結果になってしまう。
つまりwawawa_arrayとsasasa_arrayは同じリストを参照しているということ。
対処法
Pythonではcopyモジュールというものがあります。
以下のようにすることで別々のリストを参照するようになり、もとのリスト(wawawa_array)には影響を及ぼさないようになります。
from copy import copy
wawawa_array = ['wa1','wa2','wa3']
sasasa_array = copy(wawawa_array)
sasasa_array[0] = 'sa1'
print(wawawa_array)
print(sasasa_array)
実行してみるとこんなかんじでsasasa_arrayだけが変更されていることがわかる。
['wa1', 'wa2', 'wa3']
['sa1', 'wa2', 'wa3']
おわりに
注意せねば