copyモジュールを使用してリストコピーを実現

5617 ワード

まず簡単な操作をします.
a=[1,2,3]
b=a
b.remove(1)
print('a=',a)
print('b=',b)

結果が表示されます.
a=[2,3]
b=[2,3]

不思議なことに、私はbを修正して、どうしてaの値も変わったのですか.--この方法は実際には新しいリストを生成していないが、bは依然としてaが指すオブジェクトを指している.このように、aまたはbの要素を修正すると、a,bの値が同時に変化する.
したがって、aの値を変更するには、copyを使用してコピーする必要があります.この場合、次の操作を行います.
a=[1,2,3]
b=a.copy()
b.remove(1)
print('a=',a)
print('b=',b)

結果は次のようになります.
a=[1,2,3]
b=[2,3]

これによりaの値の変化は起こらず、ここでのcopyの使用はb=a[:]で代用することもできる
ただし、a=[1,[2,3],4]の場合、このときのcopy()はa[1]に対して新しいテーブルを形成することなく、参照処理をコピーすることに注意してください.例:
a=[1,[2,3],4]
b=a.copy()
b[1].append(5)
print('a1=',a)
print('b1=',b)
b.append(6)
print('a2=',a)
print('b2=',b)

結果は次のとおりです.
a1=[1,[2,3,5],4]
b1=[1,[2,3,5],4]
a2=[1,[2,3,5],4]
b2=[1,[2,3,5],4,6]

上から分かるように、b[1]を操作すると、aに影響します.では、この問題をどのように解決しますか.この場合、copyモジュールのdeepcopy関数を使用する必要があります.
import copy;
a=[1,[2,3],4]
b=copy.deepcopy(a)
b[1].append(5)
print('a1=',a)
print('b1=',b)
b.append(6)
print('a2=',a)
print('b2=',b)

結果は次のようになります.
a1=[1,[2,3],4]
b1=[1,[2,3,5],4]
a2=[1,[2,3],4]
b2=[1,[2,3,5],4,6]