更新时间:2024-03-15 来源:黑马程序员 浏览量:
在Python中,要拷贝一个对象,我们可以使用浅拷贝(shallow copy)或者深拷贝(deep copy),具体取决于我们想要的复制深度。这两者的主要区别在于拷贝的对象中是否包含了子对象,以及是否创建了对原始对象的全新副本。接下来笔者就针对两种拷贝方法的详细说明以及代码演示:
浅拷贝会创建一个新的对象,但是它只会复制原始对象的顶层结构,而不会复制其内部的子对象。这意味着拷贝后的对象中的子对象仍然是原始对象中子对象的引用。
使用copy模块的copy()函数来进行浅拷贝:
import copy # 原始列表 original_list = [1, 2, [3, 4]] # 进行浅拷贝 copied_list = copy.copy(original_list) # 修改原始列表的子对象 original_list[2][0] = 100 # 输出原始列表和拷贝后的列表 print("Original list:", original_list) print("Copied list:", copied_list)
输出:
Original list: [1, 2, [100, 4]] Copied list: [1, 2, [100, 4]]
可以看到,尽管我们只修改了原始列表中的子对象,但是拷贝后的列表中的对应子对象也发生了变化,这是因为浅拷贝只复制了原始列表的顶层结构,而不会复制其内部的子对象。
深拷贝会创建一个完全独立于原始对象的新对象,包括其内部的所有子对象。这意味着即使原始对象中的子对象发生了变化,深拷贝后的对象也不会受到影响。
使用copy模块的deepcopy()函数来进行深拷贝:
import copy # 原始列表 original_list = [1, 2, [3, 4]] # 进行深拷贝 copied_list = copy.deepcopy(original_list) # 修改原始列表的子对象 original_list[2][0] = 100 # 输出原始列表和拷贝后的列表 print("Original list:", original_list) print("Copied list:", copied_list)
输出:
Original list: [1, 2, [100, 4]] Copied list: [1, 2, [3, 4]]
可以看到,即使修改了原始列表中的子对象,深拷贝后的列表中的对应子对象保持不变,这是因为深拷贝会递归地复制原始对象及其所有子对象。
1.使用浅拷贝时,复制的对象与原始对象共享内部子对象的引用,因此对原始对象的子对象的修改会影响到拷贝后的对象。
2.使用深拷贝时,复制的对象是完全独立于原始对象的,即使原始对象中的子对象发生变化,也不会影响到拷贝后的对象。
根据我们的需求选择适当的拷贝方式,以确保程序的正确性和性能。
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业当天offer率91%,薪资1W+占比54.2%,班级均薪12k+
2025-09-19