python的Q&A(1):浅拷贝和深拷贝的区别?

浅拷贝与深拷贝的区别,仅与复合对象相关。

复合对象:即包含列表或类的实例等其他对象的对象。
举个例子,
单个列表是非复合对象,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))

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/daxiangaifashi/article/details/117814664