深浅拷贝
Posted tengteng0520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深浅拷贝相关的知识,希望对你有一定的参考价值。
浅拷贝:只拷贝第一层
深拷贝:拷贝所有数据(可变类型),一般发生在嵌套类型中
可变类型:列表,集合,字典
不可变类型:数字,布尔,字符串
特殊情况:元组是不可变类型
示例一:
浅拷贝时,只拷贝第一层,字符串类型是不可变类型(由于小数据池缘故)未重新拷贝
不可变类型,深浅拷贝地址不变
v1="alex"
import copyv2=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))#变
以上是关于深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章