Python列表复制有几种方式,有何不同?
发布时间:2022-03-15 14:00:53 所属栏目:语言 来源:互联网
导读:本文主要介绍Python列表复制的内容,而Python中列表的复制有直接赋值、浅复制和深复制这几种。下面我们来分别了解一下几种情况的使用和区别是什么。 直接赋值 a = [11, 22, 33] b = a print(id(a), id(b)) b[0]=1 print(a,b) 输出结果为如下所示,发现内存地
本文主要介绍Python列表复制的内容,而Python中列表的复制有直接赋值、浅复制和深复制这几种。下面我们来分别了解一下几种情况的使用和区别是什么。 直接赋值 a = [11, 22, 33] b = a print(id(a), id(b)) b[0]=1 print(a,b) 输出结果为如下所示,发现内存地址没有发生变化,b只是a的引用,通过b更改列表的值时,a同时做修改。 用切片赋值 a = [11, 22, 33] b = a[:] print(id(a), id(b)) b[0]=1 print(a,b) 输出结果为如下所示,发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。 copy()复制实现赋值 a = [11, 22, 33] b = copy.copy(a) print(id(a), id(b)) b[0]=1 print(a,b) 输出结果为如下所示,发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。说明copy()复制的方式和切片的方式功能相同。 deepcopy()复制实现赋值 a = [11, 22, 33] b = copy.deepcopy(a) print(id(a), id(b)) b[0]=1 print(a,b) 输出结果为如下所示,发现在该实例中,deepcopy()和copy()的方式没有任何区别。 那么浅复制和深复制有什么区别呢?继续看下面的实例测试。 copy()和deepcopy()的区别 6.1 copy() a = [11, 22, 33, [1,2]] b = copy.copy(a) print(id(a), id(b)) b[3][0]=11 print(a,b) 运行结果: 6.2 deepcopy() a = [11, 22, 33, [1,2]] b = copy.deepcopy(a) print(id(a), id(b)) b[3][0]=11 print(a,b) 运行结果: 通过上面的测试,发现当列表a中的元素包含子列表时: copy()方法为浅复制,没有复制子对象,当原始数据改变,子对象会改变;而deepcopy()方法包含对象里面的子对象的复制,当原始对象改变,不会造成深复制里任何子元素的改变。 (编辑:鹤壁站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |