对于普通数据拷贝深浅拷贝是没有区别的,比如:
list1 = [1,2,3]
list2 = copy.copy(list1)
list3 = copy.deepcopy(list1)
那么list2,list3的打印结果都是1,2,3
当list1中的值变化时,list2和list3是不会变化的,因为拷贝后,系统为它们分配了一个新的内存。(元祖除外
)
当拷贝对象为元祖时,无论是深拷贝还是浅拷贝,都只是得到了元祖的一个引用。
然而,嵌套类型的拷贝就有区别了,如图:
浅拷贝
list1 = [1,2]
list2 = [3,4]
list3 = [list1,list2]
list4 = copy.copy(list3)
当修改list1中元素 list1[0] = 100后
list3和list4的值均变为[100,2,3,4] (因为它们都是存储的list1/list2的内存地址)
深拷贝
list1 = [1,2]
list2 = [3,4]
list3 = [list1,list2]
list4 = copy.copy(list3)
当修改list1[0]=100后
list3 = [100,2,3,4]
list4 =[1,2,3,4]
list4之所以没有改变是因为list4把list3和其存储的引用内存全部拷贝过来了,当list1的值再改变时和list4中的list1就没有关系了,此时list4中的list1也就相当于不叫list1了。