python 的深拷贝和浅拷贝有什么区别,请举例

本文介绍了Python中深拷贝和浅拷贝的区别,浅拷贝仅复制顶层属性,子对象共享;深拷贝复制所有层级属性,创建独立副本。选择取决于需求,如需高效且子对象可共享则选浅拷贝,需保护原对象不受影响则用深拷贝。
摘要由CSDN通过智能技术生成

在 Python 中,深拷贝和浅拷贝都是对对象的复制操作,但它们之间有着本质的区别。主要的区别在于复制对象时是否同时复制了对象内部的子对象。

  1. 浅拷贝(Shallow Copy)

    • 浅拷贝只复制对象的顶层属性,如果对象内部还有子对象,那么这些子对象不会被复制,而是会被共享。
    • 在 Python 中,使用 copy模块的 copy() 函数或对象的 copy() 方法可以实现浅拷贝。
    • 浅拷贝的速度通常比深拷贝快,因为它只复制了对象的顶层属性。

示例

 

 

 import copy
  
 original_list = [1, 2, [3, 4]]
 shallow_copy_list = copy.copy(original_list)
  
 print(original_list) # [1, 2, [3, 4]]
 print(shallow_copy_list) # [1, 2, [3, 4]]
  
 original_list[2][0] = 5
  
 print(original_list) # [1, 2, [5, 4]]
 print(shallow_copy_list) # [1, 2, [5, 4]]

在上面的示例中,我们可以看到,修改 original_list 中的子对象(列表 [3, 4])也会影响 shallow_copy_list,因为它们共享同一个子对象。

  1. 深拷贝(Deep Copy)

    • 深拷贝会复制对象的所有层级的属性,包括对象内部的子对象。这意味着深拷贝会创建一个与原始对象完全独立的新对象。
    • 在 Python 中,使用 copy模块的 deepcopy() 函数可以实现深拷贝。
    • 深拷贝通常比浅拷贝慢,因为它需要复制对象的所有层级的属性。

示例

 
 import copy
  
 original_list = [1, 2, [3, 4]]
 deep_copy_list = copy.deepcopy(original_list)
  
 print(original_list) # [1, 2, [3, 4]]
 print(deep_copy_list) # [1, 2, [3, 4]]
  
 original_list[2][0] = 5
  
 print(original_list) # [1, 2, [5, 4]]
 print(deep_copy_list) # [1, 2, [3, 4]]

在上面的示例中,我们可以看到,修改 original_list 中的子对象不会影响 deep_copy_list,因为它们不共享子对象。

总结:浅拷贝只复制对象的顶层属性,而深拷贝会复制对象的所有层级的属性。在选择使用浅拷贝还是深拷贝时,需要根据具体的需求和场景来决定。如果对象内部没有需要修改的子对象,或者子对象可以被共享,那么使用浅拷贝可以提高效率。如果对象内部有需要修改的子对象,并且希望修改不影响原始对象,那么应该使用深拷贝。

  • 22
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值