Pythonでリスト(配列)をコピーするの注意についてメモします。
リストのコピー
リストaをリストbにコピーするとき次のようにすると失敗します。
a = [0, 1, 2]
b = a
b[1] = 9
print(a)
b = a
b[1] = 9
print(a)
結果
[0, 9, 2]
bにaを代入してbを操作すると元のaに影響してしまうのです。
次のようにします。
a = [0, 1, 2]
b = a[:]
b[1] = 9
print(a)
b = a[:]
b[1] = 9
print(a)
結果
[0, 1, 2]
単純に代入するのではなくスライスを使います。
a[i:j]
とするとリストのi番目からj-1番目までを返します。
iを省略すると最初から、jを省略すると最後までを返します。
a[:]とすると最初から最後までを返します。
この場合、bを操作しても元のaには影響しません。
辞書のコピー
a = {"id": 1, "val": 1000}
b = a.copy()
b["val"] = 2000
print(a)
print(b)
b = a.copy()
b["val"] = 2000
print(a)
print(b)
結果
{‘id’: 1, ‘val’: 1000}
{‘id’: 1, ‘val’: 2000}
単純に代入するのではなくcopy()を使います。
b = a.copy()
とすると、bを操作しても元のaには影響しません。
コメント