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

猜你喜欢

转载自blog.csdn.net/lalalala_CG/article/details/83902898