python是一门应用非常广的语言,现在也非常流行。今天我们来看看python里对象相关的操作——如何复制对象。
工具/原料
python3
一、引用的方式复制对象
1、在python中,对象的复制按照深浅程度分为3种,依次是引用,浅复制,深复制。我们咸犴孜稍先来介绍对象引用,代码如下面图中所示,这种引用的方式是直接通过赋苒锃巳伢值的形式来实现的,将列表a的值赋值给列表b,此时b就是a的引用。b和a是一样的。
2、这个时候在列表b里面添加一个值,然后再看a里面的值,可以看到a里面也被添加了一个新值。
3、我们清空a里面的值时,可以发现,列表b里面的值也被清空了。如下面图中所示。这就是引用的特性,总结如下:1. 使用引用时,复制的对象和被复制的对象完全相同2. 修改复制的对象和被复制的对象时,两个都会同时被改变。
二、浅复制来复制对象
1、浅复制有两种形式,一种是使用对象的copy函数,另外一种使用的是python的copy模块自带的copy函剞麽苍足数。我们先看第一种,直接使用对象自带的copy函数,如下面图中所示,可以看到,对象自带的copy函数复制的对象和被复制的对象不是同一个。
2、然后我们来清除a里面的值,如下面图中所示,可以看到a里面的值清除时,b里面的值没有任何改变。
3、当我们在b里面添加一个值的时候,可以发现,a里也没有任何变化。如下面图中所示。从图中看,看起来a和b是两个各自独立的对象,但是实际上还有区别。
4、下面我们来看,如下图中所莲镘拎扇示,此时的列表a里面多了一个子列表['x','y'],然后使用自带的copy函数来复制。然后给子列表中添加一个值,然后再查看b中的值。可以看到b中的子列表也添加了一个值。说明a和b不是完全独立的两个对象,这也是为什么称为浅复制的原因。
5、下面我们来看python的copy模块自带的copy函数。如下面图中所示,可以看到copy模块的copy函数和列表自带的copy函数表现是一致的。
6、再试一下子列表的添加,如下面图中所示,可以看到子列表的添加也是和列表自带的copy函数一模一样,也是属于浅复制。
三、深度复制
1、最后我们来看一下深度复制的方式来复制对象,深度复制使用的是copy模块的deepcopy函数。如下所示,可以看到,如果对象只是单纯的列表,复制出来的对象是完全隔离的。
2、我们再来看看,带有子列表的对象,如下面图中所示,当列表a里面具有子列表,使用deepcopy函数复制出来的对象c,往对象a的子列表里添加值以后,对象c仍然不变,说明这个时候对象a和对象c是完全不同的两个对象。这就是深度复制。