5. 深浅copy
深浅copy
主要功能是进行拷贝,但是两者在使用上是有差别的
深浅copy都是重新创建外壳,里面的不可变的数据类型是共用的,差异主要体现在里面的可变数据类型的复制上,浅copy直接共用,深copy是创建一个新的
浅copy:
l1=[1,2,3,[1,2]]
l2=l1.copy
# 此时两个列表的id不同
浅copy是将列表内容(列表里面放的是元素索引和元素数据的地址)复制一份给新的列表(新的列表和旧的列表id是不同的),对于列表里面的元素,用的都是一个(简单的来说就是将列表的壳复制了一份,里面装的东西还是一样的)
当需要对列表里面的数据进行改变的时候,可变类型和不可变类型的数据有所不同,不可变的数据类型如果更改(例如将l2列表的1换成100),就直接创建一个新的数据,指向新的数据(例子中的100),原列表(l1)不受影响,但是对于可变的数据类型(例如l2里面的[1,2]),更改里面的数据(将[1,2]里面的2换成200)会直接影响原来的数据(这时l1里面的[1,2]也会变成[1,200])
简单的说就是复制一个外壳,里面的数据用的都是一样的,但是改变元素的时候,可变类型的元素不共用,可变类型的数据共用一套
深copy:
import copy
l1=[1,2,3,[1,2]]
l3=copy.deepcopy(l1)
# 此时两个列表的id也不同
深copy的时候,不可变的元素共用,但是修改的时候创建一个新的数据,指向新的数据(这和浅copy是一样的),对于可变的元素(例如l1里面的[1,2]),是复制一个新的外壳(id不一样),里面的元素还是共用,但是修改的时候,是会指向新的数据,对原来的列表没有影响(解决了可变类型的元素共用的问题,修改元素时互不影响)
对于深copy来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的

浙公网安备 33010602011771号