python リスト(配列)内の値をコピーする

python リスト(配列)内の値をコピーする

pythonで、リスト(配列)内の値をコピーするサンプルコードを記述してます。コピーの仕方は、参照渡し(浅いコピー)と値渡し(深いコピー)があります。

環境

  • OS windows10 pro 64bit
  • python 3.7.6

コピー

参照渡し(浅いコピー)でコピーした場合は、コピー元の値を変わってしまいます。

lst1 = [1, 2, 3]

lst2 = lst1

print(lst1) # [1, 2, 3]

print(lst2) # [1, 2, 3]

# lst2を編集
lst2[0] = 7 

print(lst1) # [7, 2, 3]

print(lst2) # [7, 2, 3]

値渡し(深いコピー)にしたい場合は、「copy」をimportして使用します。

import copy

lst1 = [1, 2, 3]

lst2 = copy.copy(lst1)

print(lst1) # [1, 2, 3]

print(lst2) # [1, 2, 3]

lst2[0] = 7

print(lst1) # [1, 2, 3]

print(lst2) # [7, 2, 3]

スライシングを使用する方法もあります。

lst1 = [1, 2, 3]

lst2 = lst1[:]

print(lst1) # [1, 2, 3]

print(lst2) # [1, 2, 3]

lst2[0] = 7

print(lst1) # [1, 2, 3]

print(lst2) # [7, 2, 3]

また、多次元配列の場合は「copy.copy」では、下の階層までコピーはされないため、

import copy

lst1 = [[1, 2, 3],[4, 5, 6]]

lst2 = copy.copy(lst1)

print(lst1) # [[1, 2, 3], [4, 5, 6]]
print(lst2) # [[1, 2, 3], [4, 5, 6]]

lst2[0][0] = 7

print(lst1) # [[7, 2, 3], [4, 5, 6]]
print(lst2) # [[7, 2, 3], [4, 5, 6]]

「copy.deepcopy」を使用します。

import copy

lst1 = [[1, 2, 3],[4, 5, 6]]

lst2 = copy.deepcopy(lst1)

print(lst1) # [[1, 2, 3], [4, 5, 6]]
print(lst2) # [[1, 2, 3], [4, 5, 6]]

lst2[0][0] = 7

print(lst1) # [[1, 2, 3], [4, 5, 6]]
print(lst2) # [[7, 2, 3], [4, 5, 6]]