Python 高级编程必会之深浅拷贝

浅拷贝和深拷贝在Python中各有用武之地,正确的选择取决于具体的应用场景、数据结构的复杂性以及对性能的要求。理解这两种方法的工作原理和差异,是每个Python开发者在进行数据复制操作时必须掌握的基础。

 

在我们进行Python编程的时候,复制(拷贝)数据结构是一种常见的操作,比如当我们想要保留原始数据,对生成的数据副本进行修改时。Python中提供了两种不同的数据拷贝方式:浅拷贝和深拷贝,这两种方式在拷贝数据结构时有很大的不同,在实际编程中我们需要结合程序的性能和应用场景选择合适的拷贝方法。

变量传递引

我们知道在Python中,变量可以存放对于对象的引用(内存地址),当我们创建一个对象并且将其分配给一个变量时,这个变量就存储了该对象的引用,如果还有另外一个变量同时引用这个相同的对象,那么对其中一个变量所引用的对象所做的修改,另一个变量引用的对象也会发生变化。

class Student:    def __init__(self, name):        self.name = name
a = Student('张三')# a与b都是存放的对应Student对象的引用,b并没有重复存放Student对象,而是存放了对于其对象的引用b = aa.name = '李四'# 当修改Student对象时,b引用的对象都会发生变化print(a.name)print(b.name)

一层对象深浅拷贝

Python的copy模块提供了copy()函数来实现浅拷贝和deepcopy()函数来实现深拷贝。

通过下图内存分配过程,我们可以看到对于简单的一层数据结构对象,再进行深浅拷贝时并没有什么差异,两者的表现相同:

  • 对于可变类型 列表、字典、集合,使用深浅拷贝会复制对象并且创建新的内存空间

  • 对于不可变类型 数字、字符串、元组,使用深浅拷贝不会开辟新的内存空间,是通过引用指向原来的

图片

复合对象深浅拷贝

当对复合对象结构进行拷贝时,深拷贝和浅拷贝的表现就有很大的差异:

  • 浅拷贝仅对数据结构的第一层进行拷贝,并不会拷贝子级(内部)

  • 深拷贝是对数据结构是所有层次的拷贝,递归拷贝所有层级。

图片

深浅拷贝对比:

  • 浅拷贝通常比深拷贝更快,因为它不需要递归复制每个子对象

  • 深拷贝在拷贝复杂对象时会消耗较多时间和内存,因为它需要给每个嵌套对象创建新的内存空间

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值