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

深浅拷贝

时间:2019-07-25 00:51:42      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:地址   特殊情况   布尔   span   嵌套   int   port   class   深浅拷贝   

浅拷贝:只拷贝第一层

深拷贝:拷贝所有数据(可变类型),一般发生在嵌套类型中

可变类型:列表,集合,字典

不可变类型:数字,布尔,字符串

特殊情况:元组是不可变类型

示例一:

 

浅拷贝时,只拷贝第一层,字符串类型是不可变类型(由于小数据池缘故)未重新拷贝
不可变类型,深浅拷贝地址不变

v1="alex"
import copy
v2=copy.copy(v1)print(id(v1),id(v2))#地址不变v3=copy.deepcopy(v1)print(id(v1),id(v3))#地址不变

示例二:

列表是可变类型,深浅拷贝地址都不一样

v1=[1,2,3,4]
 import copy
 v2=copy.copy(v1)
 print(id(v1),id(v2))#地址改变
 v3=copy.deepcopy(v1)
 print(id(v1),id(v3))#地址改变

示例三:

#列表嵌套
 v1=[1,2,3,[11,22,33]]
 import copy
 v2=copy.copy(v1)
 print(id(v1),id(v2))#不同
 print(id(v1[3]),id(v2[3]))#同,浅拷贝只拷贝第一层
v3=copy.deepcopy(v1)
 print(id(v1),id(v3))#不同
 print(id(v1[3]),id(v3[3]))#不同

练习

练习1import copy v1=[1,2,3] v2=copy.copy(v1) print(v1==v2)#true print(v1 is v2)#falseprint(v1[0] is v2[0])#true练习2 import copy v1=[1,2,3] v2=copy.deepcopy(v1) print(v1==v2)#trueprint(v1 is v2)#false
# print(v1[0] is v2[0])#true
#练习3
# import copy
# v1=[1,2,3,{‘k1‘:123,‘k2‘:456}]
# v2=copy.deepcopy(v1)
# print(v1==v1)#true
# print(v1 is v2)#false
# print(v1[0]is v2[0])#true
# print(v1[3]==v2[3])#true
# print(v1[3] is v2[3])#false

#特殊情况:元组不可变类型,地址不变

#1不嵌套
v1=(1,2,3,4,)
import copy
v2=copy.copy(v1)
print(id(v1),id(v2))
v3=copy.deepcopy(v1)
print(id(v1),id(v3))
#嵌 套
v1=(1,2,[1,2,3],4,)
import copy
v2=copy.copy(v1)
print(id(v1),id(v2))#不变
v3=copy.deepcopy(v1)
print(id(v1),id(v3))#

 

深浅拷贝

标签:地址   特殊情况   布尔   span   嵌套   int   port   class   深浅拷贝   

原文地址:https://www.cnblogs.com/tengteng0520/p/11241653.html

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