标签:地址 特殊情况 布尔 span 嵌套 int port class 深浅拷贝
浅拷贝:只拷贝第一层
深拷贝:拷贝所有数据(可变类型),一般发生在嵌套类型中
可变类型:列表,集合,字典
不可变类型:数字,布尔,字符串
特殊情况:元组是不可变类型
示例一:
浅拷贝时,只拷贝第一层,字符串类型是不可变类型(由于小数据池缘故)未重新拷贝
不可变类型,深浅拷贝地址不变
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))#变
标签:地址 特殊情况 布尔 span 嵌套 int port class 深浅拷贝
原文地址:https://www.cnblogs.com/tengteng0520/p/11241653.html