码迷,mamicode.com
首页 > 其他好文 > 详细

浅拷贝和深拷贝

时间:2015-06-10 15:59:52      阅读:104      评论:0      收藏:0      [点我收藏+]

标签:

要想称为一个python高手,首先应该注意对象的变更操作和赋值,它们都是针对对象的引用操作的,如果你想修改一个对象而且想让原始的对象不受影响,那你就需要对象复制,你可以使用copy中的两个方法来实现需求,一般的,可以使用copy.copy,它可以进行对象的浅复制,它复制了对象,但对于对象中的元素,依然使用引用,
copy.copy中如果有容器元素的话,复制的也是容器元素的引用。如果希望复制一个容器对象,以及它里面的所有元素,使用copy.deepcopy,这个方法是copy.copy方法的递归版,如果你需要完全复制,这是唯一的方法。

如果项复制一个列表,使用list(L)
要复制一个字典,使用dict(d)
要复制一个集合,使用set(s)
我们得出一个规律,如果你要复制一个对象o,它属于内建类型t,那么你可以使用t(o)来获得一个拷贝
dict也提供了一个复制版本,dict.copy,这个和dict(d)是一样的,推荐使用后者,代码的一致性,并且也少了几个字符
要复制一个别的类型,无论是你自己写的,还是使用库中的,使用copy.copy,如果你自己写的一个类,没必要废神去写clone和copy函数,如果你想定义自己的类复制的方式,实现__copy__或则__getstat__和__setstat__,如果你想定义自己类型的deepcopy,实现方法__deepcopy__

注意,你不用复制不可变对象,因为你不用担心修改他们,如果你想尝试赋值,依然会得到原来的。

浅拷贝和深拷贝

标签:

原文地址:http://my.oschina.net/yangting880815/blog/465082

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!