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]]
总结一下就是:
浅复制共享内嵌对象,深复制重新创建一个新对象