该模块用于创建复合对象(包括列表,元组,字典,用户自定义对象的实例)的深浅拷贝的函数
copy(x)
对于内置类型,该函数不常用。直接使用比如 list() dict() set()等调用来创建浅拷贝,这种方式比使用copy()速度快很多
deepcopy(x)
深拷贝。
关于深浅拷贝的概念理解:
>>> class Rectangle:
pass
>>> class Point:
pass
>>> rec1 = Rectangle()
>>> rec1.width = 10
>>> rec1.length = 20
>>> rec1.corner = Point()
>>> rec1.corner.x = 1
>>> rec1.corner.y = 2
一个长方形对象,一个点对象,我们实例化一个rec1,它有长、宽,还有一个点坐标(x,y)。
继续我们的代码:
>>> import copy
>>> rec2 = copy.copy(rec1)
>>> rec1.corner
>>> rec2.corner
我们用copy这个BIF拷贝rec1给rec2,但是拷贝的结果是不是有点跟期望不一样呢?它们两个点对象竟然是同一个对象=。=
一些简单的对象,如点,没有包含任何嵌入对象,copy方法已经足够了。这种复制叫做浅拷贝!
那么现在,我们应该如何实现完完整整的拷贝呢?
感谢苍天,感谢大地,copy模块中有一个叫做deepcopy的方法,他可以拷贝任何嵌入的对象。这种拷贝,我们称之为:深拷贝!
>>> rec2 = copy.deepcopy(rec1)
>>> rec1.corner
>>> rec2.corner
这样就OK了,现在的rec1和rec2已经是两个不同的对象了。