西邮大三狗!!!
分类: Python/Ruby
2015-06-08 13:00:49
>>> 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
<__main__.Point object at 0x0000000002B26DA0>
>>> rec2.corner
<__main__.Point object at 0x0000000002B26DA0>
我们用copy这个BIF拷贝rec1给rec2,但是拷贝的结果是不是有点跟期望不一样呢?它们两个点对象竟然是同一个对象=。=
一些简单的对象,如点,没有包含任何嵌入对象,copy方法已经足够了。这种复制叫做浅拷贝!
那么现在,我们应该如何实现完完整整的拷贝呢?
感谢苍天,感谢大地,copy模块中有一个叫做deepcopy的方法,他可以拷贝任何嵌入的对象。这种拷贝,我们称之为:深拷贝!
>>> rec2 = copy.deepcopy(rec1)
>>> rec1.corner
<__main__.Point object at 0x0000000002B26DA0>
>>> rec2.corner
<__main__.Point object at 0x00000000033DDC50>
这样就OK了,现在的rec1和rec2已经是两个不同的对象了。