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]]
-
前の記事
Ruby メソッドの引数を囲う括弧()を省略する 2020.11.15
-
次の記事
CentOs8 ssldumpをインストールする 2020.11.15
コメントを書く