だから、私はこの理解:スライス割り当て、浅い/深いコピー
a_list = [1,2,3]
b_list = [5,6,7]
a_list.append(b_list)
a_listが現在ある[1,2,3, [5,6,7]]
c_list = a_list[:]
b_list[0] = 1000
print(a_list, c_list)
a_list c_listが[1,2,3,[1000,6,7]]
です[1,2,3,[1000,6,7]]
a_list
とがa_list
に追加された場合、[5,6,7]
への参照であり、b_list
への変更はa_list
とc_list
の変化を示すため、は両方とも変更されています。それは良い。あなたが持っているとき
問題がある:
a_list = [1, 2, [1,5,0]]
b_list = a_list[:]
a_list[2][1] = 90000
print(a_list, b_list)
a_list
は[1, 2, [1, 90000, 0]]
あるとb_list
は[1, 2, [1, 90000, 0]]
です。
b_list
がなぜ変更されましたか? b_list
は、a_list
の浅いコピーであり、参照があれば実際のオブジェクトではなく参照をコピーします。 ただし、a_list
にはcopyへの参照はありません。正確な値であり、数字のリストであり、b_list
は、a_listの値が全く異なるために変更された場合は変更しないでください。b_list
は割り当てによってa_list
を指していません。
ネストされたリストは*まだ参照*です。変数は名前付き参照であり、リスト内のインデックスは番号付き参照です。 –
浅いコピーは、元のリストの要素と同じ要素を持つ新しいリストです(*これらの要素のコピーではありません)。再帰的に要素をコピーする場合は、 'copy.deepcopy'を使用してください。 –