對(duì)于普通數(shù)據(jù)拷貝深淺拷貝是沒有區(qū)別的姻檀,比如:
list1 = [1,2,3]
list2 = copy.copy(list1)
list3 = copy.deepcopy(list1)
那么list2,list3的打印結(jié)果都是1,2,3
當(dāng)list1中的值變化時(shí)岖沛,list2和list3是不會(huì)變化的,因?yàn)榭截惡蟊岂桑到y(tǒng)為它們分配了一個(gè)新的內(nèi)存诗力。(元祖除外
)
當(dāng)拷貝對(duì)象為元祖時(shí)烙心,無論是深拷貝還是淺拷貝,都只是得到了元祖的一個(gè)引用选泻。
然而冲粤,嵌套類型的拷貝就有區(qū)別了,如圖:
淺拷貝
list1 = [1,2]
list2 = [3,4]
list3 = [list1,list2]
list4 = copy.copy(list3)
當(dāng)修改list1中元素 list1[0] = 100后
list3和list4的值均變?yōu)閇100,2,3,4] ?(因?yàn)樗鼈兌际谴鎯?chǔ)的list1/list2的內(nèi)存地址)
深拷貝
list1 = [1,2]
list2 = [3,4]
list3 = [list1,list2]
list4 = copy.copy(list3)
當(dāng)修改list1[0]=100后
list3 = [100,2,3,4]
list4 =[1,2,3,4]
list4之所以沒有改變是因?yàn)閘ist4把list3和其存儲(chǔ)的引用內(nèi)存全部拷貝過來了滔金,當(dāng)list1的值再改變時(shí)和list4中的list1就沒有關(guān)系了色解,此時(shí)list4中的list1也就相當(dāng)于不叫l(wèi)ist1了。