1. 程式人生 > >python: copy與deepcopy

python: copy與deepcopy

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的值