Chinaunix首页 | 论坛 | 博客
  • 博客访问: 670043
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2022
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-23 11:16
个人简介

西邮大三狗!!!

文章分类

全部博文(87)

文章存档

2015年(47)

2014年(40)

分类: Python/Ruby

2015-06-08 13:00:49

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

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

<__main__.Point object at 0x0000000002B26DA0>

>>> rec2.corner

<__main__.Point object at 0x0000000002B26DA0>

我们用copy这个BIF拷贝rec1rec2,但是拷贝的结果是不是有点跟期望不一样呢?它们两个点对象竟然是同一个对象==

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

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

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

 

>>> rec2 = copy.deepcopy(rec1)

>>> rec1.corner

<__main__.Point object at 0x0000000002B26DA0>

>>> rec2.corner

<__main__.Point object at 0x00000000033DDC50>

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


阅读(3431) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~