Pythonでリスト、辞書をコピーするときの注意

Pythonでリスト(配列)をコピーするの注意についてメモします。

リストのコピー

リストaをリストbにコピーするとき次のようにすると失敗します。

a = [0, 1, 2]
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)

結果
[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)

結果
{‘id’: 1, ‘val’: 1000}
{‘id’: 1, ‘val’: 2000}

単純に代入するのではなくcopy()を使います。
b = a.copy()
とすると、bを操作しても元のaには影響しません。

コメント

タイトルとURLをコピーしました