浅拷贝与深拷贝的区别,仅与复合对象相关。
复合对象:即包含列表或类的实例等其他对象的对象。
举个例子,
单个列表是非复合对象,eg:[1,2,3,7,8,9]。
列表里面嵌套列表是复合对象,eg:[1,2,3,[7,8,9]]
浅拷贝构造一个新的复合对象,然后(在尽可能的范围内)将原始对象中找到的对象的引用插入其中。
深拷贝构造一个新的复合对象,然后,递归地将在原始对象里找到的对象的副本插入其中。
下面通过一个可视化工具pythontutor进行解释。
http://www.pythontutor.com/live.html#mode=edit
1.构造一个新的非复合对象,深拷贝和浅拷贝没有区别
from copy import copy, deepcopy
aa = [1, 2, 3, 4]
copy_bb = copy(aa)
deepcopy_cc = deepcopy(aa)
print("浅拷贝:{}".format(copy_bb))
print("深拷贝:{}".format(deepcopy_cc))

2.构造一个新的复合对象,深拷贝插入的是原始对象的副本,浅拷贝插入的是原始对象的引用。
from copy import copy, deepcopy
aa = [1, 2, 3, 4, [7, 8, 9]]
copy_bb = copy(aa)
deepcopy_cc = deepcopy(aa)
print("浅拷贝:{}".format(copy_bb))
print("深拷贝:{}".format(deepcopy_cc))


本文探讨了浅拷贝与深拷贝在处理复合对象时的区别,通过实例说明浅拷贝保留原始引用,而深拷贝创建完整副本。理解这对于列表嵌套和其他复杂结构的重要性。
1356

被折叠的 条评论
为什么被折叠?



