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来说,列表是在内存中重新创建的,列表中可变的数据类型是重新创建的,列表中的不可变的数据类型是公用的

posted @ 2021-07-19 23:57  奇点^  阅读(53)  评论(0)    收藏  举报