该模块用于创建复合对象(包括列表,元组,字典,用户自定义对象的实例)的深浅拷贝的函数

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拷贝rec1rec2,但是拷贝的结果是不是有点跟期望不一样呢?它们两个点对象竟然是同一个对象==

一些简单的对象,如点,没有包含任何嵌入对象,copy方法已经足够了。这种复制叫做浅拷贝!

那么现在,我们应该如何实现完完整整的拷贝呢?

感谢苍天,感谢大地,copy模块中有一个叫做deepcopy的方法,他可以拷贝任何嵌入的对象。这种拷贝,我们称之为:深拷贝!

 

>>> rec2 = copy.deepcopy(rec1)

>>> rec1.corner

>>> rec2.corner

这样就OK了,现在的rec1rec2已经是两个不同的对象了。


10-08 03:08
查看更多