深浅拷贝

浅拷贝:只拷贝第一层

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

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

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

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

示例一:

 

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

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))#

 

posted @ 2019-07-24 23:53  嘘,在学习呢  阅读(130)  评论(0编辑  收藏  举报