不可变类型数据深浅copy
浅copy:副本对象和子对象都仅被引用,不会被copy
深copy:若原对象中含有可变类型数据,则copy最外层对象和其中的可变对象,其余不可变对象仅被引用
若原对象中不含可变类型数据,则副本对象和子对象都仅被引用,不会被copy
import copy
A = [1,2,3]
B = (4,5,6)
C = (A,B)
print('A:',A,id(A))
print('B:',B,id(B))
print('C:',C,id(C),' C[0]:',C[0],id(C[0]),' C[1]:',C[1],id(C[1]))
# 浅拷贝
# D = copy.copy(C)
# print('D:',D,id(D))
# 深拷贝
# 原对象中含有可变类型数据
D = copy.deepcopy(C)
print('D:',D,id(D),' D[0]:',D[0],id(D[0]),' D[1]:',D[1],id(D[1]))
# 原对象中不含可变类型数据
F = (B,(7,8),9,'不含可变类型数据')
print('F:',F,id(F),' F[0]:',F[0],id(F[0]),' F[1]:',F[1],id(F[1]))
E = copy.deepcopy(F)
print('E:',E,id(E),' E[0]:',E[0],id(E[0]),' E[1]:',E[1],id(E[1]))
A: [1, 2, 3] 1044774867464
B: (4, 5, 6) 1044905880536
C: ([1, 2, 3], (4, 5, 6)) 1044905907080 C[0]: [1, 2, 3] 1044774867464 C[1]: (4, 5, 6) 1044905880536
D: ([1, 2, 3], (4, 5, 6)) 1044905906824 D[0]: [1, 2, 3] 1044781494344 D[1]: (4, 5, 6) 1044905880536
F: ((4, 5, 6), (7, 8), 9, '不含可变类型数据') 1044776174760 F[0]: (4, 5, 6) 1044905880536 F[1]: (7, 8) 1044905875272
E: ((4, 5, 6), (7, 8), 9, '不含可变类型数据') 1044776174760 E[0]: (4, 5, 6) 1044905880536 E[1]: (7, 8) 1044905875272