copy模块中有 浅拷贝 和 深拷贝 两种方法
1. 浅拷贝:
浅拷贝只拷贝外层列表 内层列表跟随原列表进行改变
浅拷贝copy.copy(var) 或者 var.copy()
2. 深拷贝:
拷贝整个列表 内外列表都不跟随原列表进行改变
深拷贝copy.deepcopy(var)
注意: copy 模块的 copy 函数和 python 内置的 copy 函数一样都是浅拷贝
例子:
1. python内置的copy函数
# 浅拷贝 只拷贝一级所有元素 # lst2 = lst1 lst1 = [1, 2, 3, [4, 5, 6]] lst2 = lst1.copy() lst1[-1].append(7) print(lst1) print(lst2)
执行结果:
[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6, 7]]
2. 使用模块进行浅拷贝操作
# 使用 copy 模块中的 copy 方法进行浅拷贝操作 import copy lst1 = [1, 2, 3, [4, 5, 6]] lst2 = copy.copy(lst1) lst1[-1].append(7) print(lst1) print(lst2)
执行结果:
[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6, 7]]
3. 深拷贝
# 深拷贝 将所有级别的元素统统独立拷贝一份 '''每一级的所有元素通通拷贝一份,不沿用以前的数据''' # import 引入 copy 模块 deepcopy 深拷贝 import copy lst1 = [1, 2, 3, [4, 5, 6]] lst2 = copy.deepcopy(lst1) lst1[-1].append(7) print(lst1) print(lst2)
执行结果:
[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6]]
4.切片得到的列表属于什么拷贝
# 使用列表的切片实现浅拷贝, 不能实现深拷贝 lst1 = [1, 2, 3, [4, 5]] lst2 = lst1[:] lst1[-1].append(6) print(lst1) print(lst2)
执行结果:
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6]]