Skip to main content

ログ取得ツール (移転先予定地)

メモ:Pythonの配列のdeep copy

Pythonの配列は普通に代入していくと参照しか渡されない。

a=[1,2,3]
b=a
print a,b
a[1]=10
print a,b
[1, 2, 3] [1, 2, 3]
[1, 10, 3] [1, 10, 3]

そこで、コピーするには、以下のようにしていた。

a=[1,2,3]
b=a*1
print a,b
a[1]=10
print a,b
[1, 2, 3] [1, 2, 3]
[1, 10, 3] [1, 2, 3]

または、以下のようにする。

a=[1,2,3]
b=a[:]
print a,b
a[1]=10
print a,b
[1, 2, 3] [1, 2, 3]
[1, 10, 3] [1, 2, 3]

しかし実はこれでも多重配列には十分ではないようで、少々ハマった。自力でdeep copyするしかないのかと思ってぐぐってみたら、copyモジュールを使えば普通にdeep copyできるらしい。

import copy
a=[1,2,3]
b=copy.deepcopy(a)
print a,b
a[1]=10
print a,b
[1, 2, 3] [1, 2, 3]
[1, 10, 3] [1, 2, 3]

これはありがたい。試しに3重配列をいじくりながら再帰的に探索するプログラムに使ってみたが、普通に動作してくれた。