【编程】Python浅拷贝和深拷贝

当创建数组或者对象的时候,可以使用深拷贝或浅拷贝。利用浅拷贝,将创建一个新的对象,并且会从现有对象复制非静态字段到新对象当中。如果这个字段是值类型,拷贝将按位进行。如果字段是引用类型,这个引用将被拷贝,但是被引用的对象不会被拷贝,不过源对象和它的克隆都将引用同一个对象。当进行深拷贝创建一个新的对象时,当前对象的非静态字段将被拷贝。如果一个字段是值类型,将按位拷贝这个字段,如果一个字段是引用类型,被引用的对象将被拷贝。

例子

import copy
color1 = [‘Red’, ‘Blue’]
color2 = [‘White’,’Black’]
color3 = [color1 , color2]
# 一般拷贝
color4 = color3
print (id(color3) == id(color4)) # True – color3 is the same object as color4
print (id(color3[0]) == id(color4[0])) # True – color4[0] is the same object as color3[0]
# 浅拷贝
color4 = copy.copy(color3)
print (id(color3) == id(color4)) # False – color4 is now a new object
print (id(color3[0]) == id(color4[0])) # True – The new variable refers to the original variable.
#深拷贝
color4 = copy.deepcopy(color3)
print (id(color3) == id(color4)) # False – color4 is now a new object
print (id(color3[0]) == id(color4[0])) # False – color4[0] is now a new object

输出

True
True
False
True
False
False

解释:

color4 = color3

使用普通的赋值操作符 ,copy (color4 = color3)

print (id(color3) == id(color4))
输出是 True,因为 color3和 color4是同一个对象。

print (id(color3[0]) == id(color4[0])) 输出是 True,因为 color4[0]和color3[0]是同一个对象。

在下一行使用浅拷贝  color4 = copy.copy(color3)

浅拷贝构造一个新对象,并且插入原对象里面的对象的所有的引用。

print (id(color3) == id(color4)) 输出是 False,因为 color4是一个新的对象。

print (id(color3[0]) == id(color4[0])) 输出是 True ,因为 color4[0]和color3[0]是同一个对象。

在下一行是深拷贝color4 = copy.deepcopy(color3)

深拷贝构造一个新复合对象,并且递归式的将原对象里面的所有对象的拷贝都插入到里面。

print (id(color3) == id(color4)) 输出是 False,因为color4 是一个新对象。

print (id(color3[0]) == id(color4[0])) 输出是 False因为color4[0]是一个新对象。



Python 基础

此条目发表在人工智能, 服务器, 程序开发分类目录,贴了, , , , , , , , , , , 标签。将固定链接加入收藏夹。