引言
copy 和 deepcopy 是一对”双胞胎“,基本功能都是“复制”,但他们一个被称为“浅拷贝”,另一个被称为“深拷贝”,两者之间一定是有差别的。相信很多python入门的童鞋们在刚接触这对”双胞胎“的时候也像我一样傻傻分不清。所以,今天我就给大家仔细剖析一下他们俩的区别。
我们日常生活中经常会用到copy,尤其是在使用电脑的时候,无论是把资料拷贝到U盘中,还是在文档中简单地拷贝一段文字,其实际意义就是将同一份数据一分为二成两份一模一样数据,而这两份相同的数据是独立存在的,当我们修改拷贝的新数据内容的时候,并不会对原先的旧数据进行更改。
那么,重点来了。
deepcopy
deepcopy 就和我们寻常理解的意义一样,都是拷贝原数据,形成一份新的相同数据,并且两份数据独立存在。
我们可以用一段代码清楚地表现 deepcopy :
import copy names = ['Ellen','Amy',"Alex",['Tony','Jane'],'Jennifer'] copy1 = copy.deepcopy(names) # 深拷贝 copy1[3][0] = 'Ben' # 修改copy1的第4个元素列表中的第一个子元素 print(names) # 打印原数据 print(copy1) # 打印修改后的拷贝数据 # 结果返回: ['Ellen', 'Amy', 'Alex', ['Tony', 'Jane'], 'Jennifer'] ['Ellen', 'Amy', 'Alex', ['Ben', 'Jane'], 'Jennifer']
很明显,拷贝的数据已被修改,而原数据不受影响。这下明白了吧。那么你可能就会问了, copy 又是什么鬼?
copy
先直接看代码好了。
import copy names = ['Ellen','Amy',"Alex",['Tony','Jane'],'Jennifer'] copy2 = copy.copy(names) # 浅拷贝 copy2[3][0] = 'Ben' # 修改copy2的第4个元素列表中的第一个子元素 print(names) # 打印原数据 print(copy2) # 打印修改后的拷贝数据 # 结果返回: ['Ellen', 'Amy', 'Alex', ['Ben', 'Jane'], 'Jennifer'] ['Ellen', 'Amy', 'Alex', ['Ben', 'Jane'], 'Jennifer']
可以看到,浅拷贝后的数据进行修改后,不仅拷贝的数据发生了变化,连原数据都相应改变了。这就说明,浅拷贝实际上是一个引用的功能,用一个新的标签引用原数据。
总结
最后,总结一下。
deepcopy : 即深拷贝,与我们寻常理解的拷贝的意义相同,拷贝原数据,形成新的相同数据,并且两份数据保持独立,没有关联关系。
copy: 即浅拷贝,拷贝原数据,实际上是给原数据贴上新的标签,都是指向同一对象。既然两个数据是指向相同对象,当其中一个数据做出修改,另一个数据也随之改变。
- End -