**
一、浅拷贝
可变数据类型 | 不可变数据类型 |
---|---|
列表 | 整型 |
字典 | 字符串 |
集合 | 元组 |
布尔类型 |
variant_demo1 = [1,2,3]
# 对variant_demo1进行拷贝
variant_demo2 = variant_demo1.copy()
# 对可变数据[]第一个元素进行修改
variant_demo1[0] = 4
print(variant_demo2) # [1, 2, 3]
print(variant_demo1) # [4, 2, 3]
针对可变数据类型的拷贝,当修改了被拷贝对象的第一层,拷贝的不会受到影响。
variant_demo1 = [1,2,3,[1,2]]
# 对variant_demo1进行拷贝
variant_demo2 = variant_demo1.copy()
# 对可变数据二层进行修改
variant_demo1[3][0] = 4
print(variant_demo2) # [1, 2, 3, [4, 2]]
print(variant_demo1) # [1, 2, 3, [4, 2]]
针对于可变数据类型的浅拷贝,当修改了被拷贝对象的第二层,拷贝的对象会受到影响。
二、深拷贝
import copy
mutable_copy_demo1 = [1,2,3,[1,2]]
# 深拷贝对象mutable_copy_demo1
mutable_copy_demo2 = copy.deepcopy(mutable_copy_demo1)
# 对拷贝二层修改
mutable_copy_demo1[3][1] = 4
print(mutable_copy_demo2) # [1, 2, 3, [1, 2]]
print(mutable_copy_demo1) # [1, 2, 3, [1, 4]]
三、小结
问:谈谈你对Python的深浅拷贝的理解。
浅拷贝:针对不可变数据类型的拷贝,被拷贝对象的修改不影响拷贝的结果。 针对可变数据类型,如果修改被拷贝对象的第一层,不会受到影响;如果拷贝到第二层,被拷贝对象的修改影响拷贝的结果。
深拷贝:构造一个新的复合对象,不会受到原拷贝对象的影响。
深浅拷贝的应用:
-
数据处理:在处理大量数据时,需要对数据进行拷贝,以免在修改数据时对原始数据造成影响。
-
算法实现:在实现一些算法,比如树形结构、图等时,需要深拷贝对象来保证算法的正确性。
-
并行计算:在并行计算中,经常需要对任务数据进行拷贝,以防止不同任务之间的数据冲突。