Pythonでの可変オブジェクトの深いコピーと浅いコピー

602 ワード

1.pythonで値を割り当てる
a = [3,6,9,4,7]
b = a

このときbとaは同じメモリアドレスを指し,a中の要素が変化するとb中も変化する.のように
a[0]=4
print(b)

output:[4, 6, 9, 4, 7]

2.浅いcopy
import copy
a = [3,6,9,4,[7]]
b = copy.copy(a)
a[0] = 4
print(b)

output:[3, 6, 9, 4, [7]]

でも
a[-1].append(9)
print(b)

output:[3, 6, 9, 4, [7, 9]]

両者を完全に隔離することはできない.
3.深いコピー
import copy
a = [3,6,9,4,[7]]
b = copy.deepcopy(a)
a[0] = 4
print(b)
a[-1].append(9)
print(b)

output1:[3, 6, 9, 4, [7]]
output2:[3, 6, 9, 4, [7]]