深浅拷贝
Posted Mr.Zuo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深浅拷贝相关的知识,希望对你有一定的参考价值。
#import copy
#浅拷贝
#copy.copy()
#深拷贝
#copy.deepcopy()
#赋值
#=
#字符串和数字、copy在内存里用的是同一地址
#对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址。
import copy #字符串、数字 #a1 = 123123 #a2 = 123123 #a2 = a1 #print(id(a1)) #print(id(a2)) a1 = \'sadasdasdasdasd\' a3 =copy.deepcopy(a1) print(id(a1)) print(id(a3))
import copy #其它、元组、列表、字典...... n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} #赋值(id 一样) #n2 = n1 #print(id(n1)) #print(id(n2))
#浅拷贝(id 不一样) n3 = copy.copy(n1) print(id(n1)) print(id(n3))
#id一样 print(id(n1[\'k3\'])) print(id(n3[\'k3\']))
深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)
import copy #其它、元组、列表、字典...... n1 = {"k1": "wu", "k2": 123, "k3": ["alex", 456]} #赋值(id 一样) #n2 = n1 #print(id(n1)) #print(id(n2)) #浅拷贝(id 不一样) #n3 = copy.copy(n1) n3 = copy.deepcopy(n1) print(id(n1)) print(id(n3)) #id一样 print(id(n1[\'k3\'])) print(id(n3[\'k3\']))
输出:
35099032
35099272
35583160
35535848
例:
import copy dic = { "cpu":[80,], \'mem\':[80,], \'disk\':[80,] } print(\'brefor\',dic) new_dic = copy.deepcopy(dic) new_dic[\'cpu\'][0] = 50 print(dic) print(new_dic)
输出:
brefor {\'cpu\': [80], \'mem\': [80], \'disk\': [80]}
{\'cpu\': [80], \'mem\': [80], \'disk\': [80]}
{\'cpu\': [50], \'mem\': [80], \'disk\': [80]}
以上是关于深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章