Python中深浅拷贝的区别

对于普通数据拷贝深浅拷贝是没有区别的,比如:

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的内存地址)

Python中深浅拷贝的区别_第1张图片
嵌套类型_浅拷贝

深拷贝

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了。


Python中深浅拷贝的区别_第2张图片
嵌套类型_深拷贝

你可能感兴趣的:(Python中深浅拷贝的区别)