Python中关于深复制和浅复制详细解释
1、copy属性 S = {1,2,3,4} D = {'a':1,'b':2} #在python3.0中 只有set和dict有copy属性,其余都没有 print(S.copy()) print(D.copy()) 2、copy模块中的copy方法 import copy #当字典,列表,元组中嵌套时 L=[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]] #浅复制,所谓的浅复制是当里面嵌套时,公用嵌套对象 L_copy = copy.copy(L) print(L_copy) #输出:[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]] print(L) #输出[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]: L[3][0]=100 print(L_copy) #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]] print(L) #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]] L_copy[3][0]=-100 print(L_copy) #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]] print(L) #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]] #因为里面嵌套的对象是公用的。所以相互影响 L[0]=1111 print(L) #输出:[1111,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]] print(L_copy) #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]] #顶层的对象不是通用的,所以不影响 print('*'*8) #深复制,所谓的深复制是当里面嵌套时,不公用嵌套对象 L_copy = copy.deepcopy(L) print(L_copy) #输出:[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]] print(L) #输出[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]]: L[3][0]=100 print(L_copy) #输出:[1,2,3,[1,2,3,4],[5,6,7,[1,3,4]]] print(L) #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]] L_copy[3][0]=-100 print(L_copy) #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]] print(L) #输出:[1,2,3,[100,2,3,4],[5,6,7,[1,3,4]]] #因为里面嵌套的对象不是公用的。所以没有影响 L[0]=1111 print(L) #输出:[1111,2,3,[100,2,3,4],[5,6,7,[1,3,4]]] print(L_copy) #输出:[1,2,3,[-100,2,3,4],[5,6,7,[1,3,4]]] #顶层的对象不是通用的,所以不影响 3、分片复制时浅复制 L = [1,2,3,[4,6,42]] L_copy = L[:] print(L) #输出[1,2,3,[4,6,42]] print(L_copy) #输出[1,2,3,[4,6,42]] L[3][0]=-100 print(L) #输出[1,2,3,[-100,6,42]] print(L_copy) #输出[1,2,3,[-100,6,42]] 总结一下就是: 浅复制共享内嵌对象,深复制重新创建一个新对象