概要
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']
おわりに
注意せねば
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る