更新时间:2023-12-28 来源:黑马程序员 浏览量:
在Python中,copy和deepcopy都是用于复制对象的方法,但它们之间有着重要的区别。
copy方法创建了一个新的对象,并将原始对象的元素(对于可变对象,是其引用)复制到新对象中。这意味着对于不可变对象,copy产生的是原始对象的副本,而对于可变对象,则复制了对象的引用。对于可变对象,如果对原始对象进行了更改,新对象也会受到影响。
import copy # 不可变对象(int) original_int = 5 copied_int = copy.copy(original_int) print(original_int) # 输出: 5 print(copied_int) # 输出: 5 # 改变原始对象的值 original_int = 10 print(original_int) # 输出: 10 print(copied_int) # 输出: 5(副本不受影响) # 可变对象(list) original_list = [1, 2, 3] copied_list = copy.copy(original_list) print(original_list) # 输出: [1, 2, 3] print(copied_list) # 输出: [1, 2, 3] # 改变原始对象 original_list.append(4) print(original_list) # 输出: [1, 2, 3, 4] print(copied_list) # 输出: [1, 2, 3, 4](因为复制的是引用,副本也受到影响)
deepcopy方法也创建了一个新的对象,但它会递归复制原始对象及其内部所有可变对象的内容,而不仅仅是引用。这样,即使原始对象的内容发生变化,深拷贝后的对象也不会受到影响。
import copy # 可变对象(list)的嵌套 original_nested_list = [1, [2, 3], 4] deep_copied_list = copy.deepcopy(original_nested_list) print(original_nested_list) # 输出: [1, [2, 3], 4] print(deep_copied_list) # 输出: [1, [2, 3], 4] # 修改原始对象内部的嵌套列表 original_nested_list[1][0] = 5 print(original_nested_list) # 输出: [1, [5, 3], 4](原始对象改变) print(deep_copied_list) # 输出: [1, [2, 3], 4](深拷贝对象不受影响)
总结来说,copy只复制了对象的引用,因此对于可变对象来说,如果原始对象发生变化,副本也会相应变化。而deepcopy则会递归复制整个对象结构,即使对象内部嵌套了其他可变对象,也能完全独立复制,从而确保深拷贝后的对象不受原始对象变化的影响。
【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】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19