リストの代入で変更が影響されない8つの方法
代入元のリストから代入先のリストにデータを渡した後に、代入先のリストを変更すると代入元も変更されてしまいます。
その変更が影響されないようにする8つの方法を紹介します。
変更が影響されるプログラム
まず、変更が影響されるプログラミングコードとColaboratoryで実行した様子を紹介します。
※”\n”と”¥n”は改行の意味です。
1 2 3 4 5 6 7 8 9 10 11 |
#代入元data1 代入先data2 data1=[1,2,3,4,5] data2=data1#・・① print("data1=",data1) print("data2=",data2,"\n") data2[0]=99#・・② print("data1=",data1) print("data2=",data2) |

①は代入元のdata1=[1,2,3,4,5]のデータをdata2に代入しています。
②は代入先のdata2の0番目の要素を99に書き換えてます。
Colaboratoryの実行結果を見てわかるようにdata1の0番目の要素も99に変更されています。
変更が影響されないようにする8つの方法
1.list()
list()を使って変更が影響されないようにする方法。
使い方
代入先=list(代入元のリスト)
1 2 3 4 5 6 7 8 9 |
data1=[1,2,3,4,5] data2=list(data1)#・・① print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |

2.copy()
copy()を使って変更が影響されないようにする方法。
使い方
代入先=代入元のリスト.copy()
1 2 3 4 5 6 7 8 9 |
data1=[1,2,3,4,5] data2=data1.copy()#・・① print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |

3.import copyのcopy.copy()
copyモジュールのcopy.copy()を使って、変更が影響されないようにする方法。
使い方
代入先=copy.copy(代入元のリスト)
1 2 3 4 5 6 7 8 9 10 |
import copy data1=[1,2,3,4,5] data2=copy.copy(data1)#・・① print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |

4.import copyのcopy.deepcopy()
copyモジュールのcopy.deepcopy()を使って、変更が影響されないようにする方法。
使い方
代入先=copy.deepcopy(代入元のリスト)
1 2 3 4 5 6 7 8 9 10 11 |
import copy data1=[1,2,3,4,5] data2=copy.deepcopy(data1)#・・① print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |

5.リスト名[:]
リスト名[:]を使って変更が影響されないようにする方法。
使い方
代入先=代入元のリスト[:]
[:]については「リストを使ったPythonのスライスをColaboratoryで実行」の投稿で紹介しています。
1 2 3 4 5 6 7 8 9 |
data1=[1,2,3,4,5] data2=data1[:]#・・① print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |

6.for文+.insert()
for文とinsert()を使って変更が影響されないようにする方法。
insertはデータを挿入するときに使う関数になります。
insertの使い方は代入先.insert(挿入場所,挿入データ)のようにして使います。
1 2 3 4 5 6 7 8 9 10 11 12 |
data1=[1,2,3,4,5] data2=[]#・・① for i in range(len(data1)):#・・② data2.insert(i,data1[i]) print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |

7.for文+append()
for文とappend()を使って変更が影響されないようにする方法。
appendはデータを追加するときに使う関数になります。
appendの使い方は代入先.append(追加するデータ)のようにして使います。
1 2 3 4 5 6 7 8 9 10 11 12 |
data1=[1,2,3,4,5] data2=[]#・・① for i in data1:#・・② data2.append(i) print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |

8.for文+=[]
for文と+=[]を使って変更が影響されないようにする方法。
代入先+=[代入するデータ]のようにして使います。
1 2 3 4 5 6 7 8 9 10 11 12 |
data1=[1,2,3,4,5] data2=[]#・・① for i in data1:#・・② data2+=[i] print("data1=",data1) print("data2=",data2,"\n") data2[0]=99 print("data1=",data1) print("data2=",data2) |
