Python基础(五):列表的深浅复制

微信扫一扫,分享到朋友圈

Python基础(五):列表的深浅复制

首先我们需要明确列表的深浅复制是针对
被嵌套的列表

而言的,也就是说只有对嵌套列表我们才需要考虑这个问题。来看例子。

list1=['老大','老二',['老三','老四','老五'],'老六','老七']
list2=list1.copy()
print(list1,'n',list2)                    #打印两个列表
print(id(list1),'n',id(list2))          #打印两个列表的地址
print(id(list1[2]),'n',id(list2[2])) #打印两个嵌套列表的地址

运行结果

['老大', '老二', ['老三', '老四', '老五'], '老六', '老七'] 
 ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七']
3072878348 
 3072561644
3072841164 
 3072841164

从结果中可以看出,虽然list1与liat2的地址相同,但是嵌套的列表[

老三
‘,

老四
‘,

老五 ‘]却有着相同的地址。这就是一种浅复制。如果此时我们修改嵌套列表的值。两个列表就都会发生改变。看下面的代码。







list1[2][1]='哈哈哈'
print(list1,'n',list2)

运行结果

['老大', '老二', ['老三', '哈哈哈', '老五'], '老六', '老七'] 
 ['老大', '老二', ['老三', '哈哈哈', '老五'], '老六', '老七']

其实原理非常简单,中间被嵌套的列表实际上是单独被分配的空间,然后list1和list2都是去引用的地址,所以当它的值改变,两个列表就都跟着变了。

深复制

深复制需要用到copy模块,来看例子。

import copy
list1=['老大','老二',['老三','老四','老五'],'老六','老七']
list2=copy.deepcopy(list1)
print(list1,'n',list2)    #打印两个列表
print(id(list1),'n',id(list2))    #打印两个列表的地址
print(id(list1[2]),'n',id(list2[2])) #打印两个嵌套列表的地址

结果

['老大', '老二', ['老三', '老四', '老五'], '老六', '老七'] 
 ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七']
3071562732 
 3071928940
3071600076 
 3071600108

这是我们如果修改嵌套的列表的值,两个列表会发生什么变化呢?

list1[2][1]='哈哈哈'
print(list1,'n',list2)

结果

['老大', '老二', ['老三', '哈哈哈', '老五'], '老六', '老七'] 
 ['老大', '老二', ['老三', '老四', '老五'], '老六', '老七']

微信扫一扫,分享到朋友圈

Python基础(五):列表的深浅复制

科技神回复 | Facebook创单日最大跌幅,小扎扎心了

上一篇

开氪精选 | 抖音文案这么写,一定能涨粉

下一篇

你也可能喜欢

Python基础(五):列表的深浅复制

长按储存图像,分享给朋友