py100_deepcopy
py100_deepcopy_深度拷贝字典
1、深浅拷贝
只想拷贝不想修改原值,就会用到深浅拷贝
总结:不可变对象: 一旦创建就不可修改的对象,包括字符串,元祖,数字
可变对象:可以修改的对象,包括:列表、字典
切片技术应用于所有序列,包括:列表、字符串
但切片不能应用于字典,对字典只能使用D.copy() 或 D.deepcopy() 方法
深浅拷贝都是对源对象的复制,占用不同的内存空间
如果源对象只有一级目录的话,源做任何改动,不影响深浅拷贝对象 将列表或字典中的第一级元素作为第一级,浅拷贝作用范围第一级,deep会作用更深的层级。
如果源对象不止一级目录的话,源做任何改动,都要影响浅拷贝,但不影响深拷贝
序列对象的切片其实是浅拷贝,即只拷贝顶级的对象
# a = 'asdasfs' # a[3] = 's' # print (a) # = 等号拷贝 # a = [1,2,4,67,8] # a1 = a # a1[1] = 100000000 # print a1 # print a # print ('a1',' ',id(a1)) # print ('a',' ',id(a)) # # copy 浅拷贝 import copy a = [[1,2],[4,67],[8,6]] a1 = copy.copy(a) a2 = copy.deepcopy(a) print ('a1',' ',id(a1)) print ('a',' ',id(a)) a1[2][0] = 1000000 print (a) print(a1) print(a2)
2 、深拷贝
函数
def deepcopy(li): if isinstance(li,list): newl = [] for i in li: if isinstance(i,(list,dict)): newl.append(deepcopy(i)) else: newl.append(i) if isinstance(li,dict): newl = {} for k in li: if isinstance(li[k],(list,dict)): newl[k] = deepcopy(li[k]) else: newl[k] = li[k] return newl a = [[1,2],[4,67],[8,6]] a1 = deepcopy(a) print a1
浙公网安备 33010602011771号