python中的copy()与deepcopy()

在牛客做题的时候发现对于python中的复制还是没有掌握,于是梳理整理一番
我们平时生活中讲到的复制是创建一个新的独立于原文件的副本,对于原文件的修改影响不到副本的内容,对副本进行修改也影响不到原文件,这在python中体现为deep copy,但是在python中不仅存在着deep copy,还存在着shallow copy,先看官方文档的介绍。
copy — Shallow and deep copy operations
The difference between shallow and deep copying is only relevant for compound objects (objects that contain other objects, like lists or class instances):

A shallow copy constructs a new compound object and then (to the extent possible) inserts references into it to the objects found in the original. (same as [:])
A deep copy constructs a new compound object and then, recursively, inserts copies into it of the objects found in the original.
根据官方文档可以看出deep copy 与shallow copy的区别在于对于复杂对象的引用,
一个浅拷贝构造一个新的复合对象,然后(尽可能地)将引用插入到原来的对象中,
深度复制构造了一个新的复合对象,然后递归地将副本插入到原来的对象中。
即,shallow copy只是复制了最外层,对于对象内部的嵌套子对象,他不去复制,而deep copy 不止复制了表面,还递归地复制原对象内部的各种子对象。
总的来说,区别在于对于原对象内部子对象的复制会产生区别,而表层则不会,如代码

import copy
origin = [1,2,3,[4,5]]
copy1 = copy.copy(origin)
copy2 = copy.deepcopy(origin)
copy1
[1, 2, 3, [4, 5]]
copy2
[1, 2, 3, [4, 5]]
origin[2] = ‘change’ #此处在原对象的表层进行操作,无差别
copy1
[1, 2, 3, [4, 5]]
copy2
[1, 2, 3, [4, 5]]
origin[3][1] = ‘change’ #此处在原对象的子对象出进行操作,差别开始体现
copy1
[1, 2, 3, [4, ‘change’]]
copy2
[1, 2, 3, [4, 5]]

再深入就涉及到了python的赋值操作,在python中赋值跟其他语言不太一样,对一个变量进行赋值就是对值进行贴标签
下回分析。

猜你喜欢

转载自blog.csdn.net/Noob_coder_JZ/article/details/80012778