python: copy與deepcopy
阿新 • • 發佈:2018-11-15
GITHUB address: https://github.com/CRH0 淺複製與深複製以及複製的問題(淺拷貝與深拷貝) 對於複製: a = [1,[22,33],(44,55,66)] b = a b[2] += (77,88) -->a,b -->[1,[22,33],(44,55,66,77,88)], [1,[22,33],(44,55,66,77,88)] 可變與不可變物件引用同一個物件 對於淺複製: import copy a = [1,[22,33],(44,55,66)] b = list(a) #b = a[:] b = copy.copy(a) 對於此例,淺複製產生之後,a與b不是同一個列表, 引用的物件是同一個[22,33],(44,55,66) b[1].remove(33) -->a,b -->[1,[22],(44,55,66)], [1,[22],(44,55,66)] b.append(77) -->a,b -->[1,[22],(44,55,66)], [1,[22],(44,55,66),77] b[0] += 1 瞭解:+= 與 = xx + ? 有什麼不同,其實說道不同那就是對於可變物件與不可變物件的差別 比如 c = [1,2,3] c += [4,5] 這個id(c)沒有變化 d = (1,2,3) d += (4, 5) id(d)產生了變化也就是將其加後賦值給了另一個物件 接著上面那個例子 b[2] += (77,88) b[1] += [44,55] -->a,b -->[1,[22,44,55],(44,55,66)], [1,[22,44,55],(44,55,66,77,88),77] 對於淺複製就說到這裡 對於深複製: e = copy.deepcopy(a) 這個將a中的物件複製了一份然後給了e的引用,上面的操作並不會影響e的值