码迷,mamicode.com
首页 > 其他好文 > 详细

全栈开发六 深浅拷贝

时间:2018-05-01 15:17:54      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:als   深拷贝   pre   可变   deepcopy   更改   意义   style   关系   

深浅拷贝

深浅拷贝的前提:  

  • 相等和相同的关系
  • 深浅拷贝针对的是列表等可变的数据类型。
  • 深浅拷贝在普通的列表没有什么意义,只有在嵌套列表,或其他嵌套数据类型才有意义。
 1 a = "aaa"
 2 a1 = "aaa"
 3 b = a
 4 print(a == a1)
 5 print(id(a),id(a1),id(b))   #都一样
 6 print(a == b)
 7 
 8 c = [1,2,3]
 9 c1 = [1,2,3]
10 d = c
11 print(c == c1)
12 print(id(c),id(c1),id(d))   #c1不一样
13 print(c == d)

 

字符串没有copy方法:

1 # st = "aaa"
2 # st2 = st.copy()  会报错,str没有copy方法

普通列表拷贝就是生成一个新的列表,两者值形同,但id不同,且更改其中一个列表的值不影响另一列表的值:

1 #普通列表拷贝
2 li = ["a",1,2]
3 li2 = li.copy()
4 print(li == li2)   #True
5 print(li is li2)   #False
6 print(id(li),id(li2))  #id不同
7 li[0] = 1
8 print(li)    #li的改变不会更改li2的值,因为两者指的是不同的对象
9 print(li2)

嵌套列表浅拷贝,两者值相同,id不同,更改非嵌套的值不影响另一列表,更改嵌套列表的值会影响另一列表。

 1 li3 = [1,2,[3,4]]
 2 li4 = li3.copy()
 3 print(li3 == li4)    #True
 4 print(li3 is li4)    #False
 5 print(id(li3),id(li4))  #id不同
 6 
 7 li3[0] = 3
 8 print(li3)    #更改非嵌套列表的元素,不会更改li4的值
 9 print(li4)
10 
11 li3[2][0] = 2
12 print(li3)    #修改嵌套列表的值,会改变li4的值
13 print(li4)

深拷贝嵌套列表,两者值相同,id不同,更改列表的值,都不会影响另一列表,即两者完全不相干。

1 li5 = copy.deepcopy(li3)  
2 li5[2][0] = 5
3 print(li5)  #[1,2,[5,4]
4 print(li3)  #[1,2,[3,4]]

 

全栈开发六 深浅拷贝

标签:als   深拷贝   pre   可变   deepcopy   更改   意义   style   关系   

原文地址:https://www.cnblogs.com/wallacewang/p/8976209.html

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