码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-07-27 20:57:08      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:div   print   复制   size   中间   相同   修改   地址   lis   

首先我们需要明确列表的深浅复制是针对被嵌套的列表而言的,也就是说只有对嵌套列表我们才需要考虑这个问题。来看例子。

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基础(五):列表的深浅复制

标签:div   print   复制   size   中间   相同   修改   地址   lis   

原文地址:https://www.cnblogs.com/austinjoe/p/9379289.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!