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

本贴最后更新于 271 天前,其中的信息可能已经时过境迁

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

变量传递引用

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

class Student:
    def __init__(self, name):
        self.name = name

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

一层对象深浅拷贝

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

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

image.png

复合对象深浅拷贝

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

image.png

深浅拷贝对比:

  • Python
    105 引用 • 237 回帖 • 2 关注
回帖
请输入回帖内容 ...