深浅拷贝
深拷贝 全部复制
浅拷贝 只复制第一层
__author__ = 'Perfect' # -*- coding: utf-8 -*- import copy # copy.copy() #浅拷贝 # # copy.deepcopy()# 深拷贝 # a = '123' #赋值 a1 = '123' a2 = a1 #通过赋值 得变量,使用的都是同一个内存地址 print(id(a1))#查看a1 的内存地址 print(id(a2))#查看a2 的内存地址 a3 = copy.copy(a1) #浅拷贝,a1 使用的内存地址 与a1 是一样的内存地址 print(id(a3))#查看浅拷贝之后的内存地址是否与a1 一致 a4 = copy.deepcopy(a1) #深拷贝,无论使用的深拷贝还是浅拷贝,在内存地址中 使用的都是同一个内存地址 print(id(a4))#打印深拷贝之后 在内存中使用的内存地址是否与a1 一致
#总结:对于字符串,深浅拷贝 在内存中使用的都是同一个内存地址.
#元祖、列表、字典之间的深浅拷贝
#浅拷贝
n1 = {'k1':"wo","k2":123,"k3":["huzhi",456]} n2 = n1 print(id(n1)) print(id(n2)) n3 = copy.copy(n1) #定义n3 浅拷贝n1 print(id(n1)) #对比n1 与 n3 的内存地址是否是一样的 print(id(n3)) #对比n1 与 n3 的内存地址是否是一样的 print(id(n1["k1"])) #对比字典中的元素 是否是一样的 print(id(n3['k1']))#对比字典中的元素是否是一样的
#--------------------------
#深拷贝 是 把 字典的所有元素都拷贝
#如果 深拷贝之后 字典的所有元素 内存地址 都不一样,就说明 深拷贝成功了
#总结:深拷贝就是说 这个 字典 有多少层,就会 进行深拷贝,并且 深拷贝后,原字典 和深拷贝之后的内存地址 是 不同的
k9 = copy.deepcopy(n1) #深拷贝 print(id(n1)) print(id(k9))
#深浅拷贝之应用实例
__author__ = 'Perfect' # -*- coding: utf-8 -*- #深浅拷贝 应用 import copy #如果有如下字典 dic = { "cpu":[80], "mem":[80], "disk":[80] } #----------------浅拷贝实例--------------- print("更改前字典:",dic) new_dic = copy.copy(dic)#浅拷贝 赋值给 new_dic new_dic['cpu'][0] = 50 #修改 赋值后的new_dic 字典 cpu 的值 print("更改后字典:",new_dic) #查看 new_dic的值被修改了 print("更改后字典:",dic) #查看原来字典的cpu 值 也被修改了,这就是浅拷贝 #输出: # {'cpu': [50], 'mem': [80], 'disk': [80]} # {'cpu': [50], 'mem': [80], 'disk': [80]} #----------------深拷贝实例--------------- ''' print("更改前字典:",dic) Lao_dic = copy.deepcopy(dic) Lao_dic['cpu'][0] = 100 print("更改之后的:",Lao_dic) print("原来的字典:",dic) ''' #输出: # 原来的字典: {'cpu': [80], 'mem': [80], 'disk': [80]} # 更改之后的: {'cpu': [100], 'mem': [80], 'disk': [80]}