1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
2. copy.deepcopy 深拷贝 拷贝对象及其子对象
----------------------不改变父对象类型----------
import copy
a = [1, 2, 3, 4, ['a', 'b']] # 原始对象
b = a # 赋值,传对象的引用
c = copy.copy(a) # 对象拷贝,浅拷贝
d = copy.deepcopy(a) # 对象拷贝,深拷贝
a.append(5) # 修改对象a
a[4].append('c') # 修改对象a中的['a', 'b']数组对象中的内容。但是类型不变,还是数组对象
print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)
'''
输出结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']] - - c是浅拷贝拷贝的是父对象、 ['a', 'b', 'c']的父对象是数组对象。但是对象的内容是可以变的。浅拷贝也会随之变化
d = [1, 2, 3, 4, ['a', 'b']] - - 深拷贝 。拷贝原始数据
'''
----------------------改变父对象类型----------
import copy
a = [1, 2, 3, 4, ['a', 'b']] # 原始对象
b = a # 赋值,传对象的引用
c = copy.copy(a) # 对象拷贝,浅拷贝
d = copy.deepcopy(a) # 对象拷贝,深拷贝
a.append(5) # 修改对象a
a[4]=1000000000 # 改变对象a中的['a', 'b']数组对象。由数组类型 变为整形 这时候浅拷贝就不随之变化了。会保持原始数据
print('a = ', a)
print('b = ', b)
print('c = ', c)
print('d = ', d)
'''
输出结果:
a = [1, 2, 3, 4, 1000000000, 5]
b = [1, 2, 3, 4, 1000000000, 5]
c = [1, 2, 3, 4, ['a', 'b']] - - c是浅拷贝拷贝的是父对象、父对象发生变化了。由数组类型变为整形了。所以浅拷贝就不发生变化了。会保持原始数据
d = [1, 2, 3, 4, ['a', 'b']] - - 深拷贝 。拷贝原始数据
'''