python的几种拷贝方式和区别

  • 浅拷贝 copy
    不拷贝子对象,故如果子对象变化,拷贝的数据子对象也会变化。
  • 深拷贝 deepcopy
    包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

看例子:

In [1]: alist = [1,2,[3,4,5],6,7]

In [2]: # 直接赋值,原始对象改变时,拷贝对象也跟随变化

In [3]: blist = alist

In [4]: print alist
[1, 2, [3, 4, 5], 6, 7]

In [5]: print blist
[1, 2, [3, 4, 5], 6, 7]

In [6]: alist[2][1]='a'

In [7]: print alist
[1, 2, [3, 'a', 5], 6, 7]

In [8]: print blist
[1, 2, [3, 'a', 5], 6, 7]

通过浅拷贝,不会拷贝子对象,故子对象若改变,拷贝的对象也会改变

In [10]: import copy

In [11]: clist = copy.copy(alist)

In [12]: print clist
[1, 2, [3, 'a', 5], 6, 7]

In [13]: print alist
[1, 2, [3, 'a', 5], 6, 7]

In [14]: alist.append('b')

In [15]: print alist
[1, 2, [3, 'a', 5], 6, 7, 'b']

In [16]: print blist
[1, 2, [3, 'a', 5], 6, 7, 'b']

In [17]: print clist
[1, 2, [3, 'a', 5], 6, 7]

In [18]: alist[2].append('sub')

In [19]: print alist
[1, 2, [3, 'a', 5, 'sub'], 6, 7, 'b']

In [20]: print clist
[1, 2, [3, 'a', 5, 'sub'], 6, 7]

深拷贝则会完整的拷贝所有原始对象,原始对象的变化不会影响拷贝对像

In [21]: dlist = copy.deepcopy(alist)

In [22]: print dlist
[1, 2, [3, 'a', 5, 'sub'], 6, 7, 'b']

In [23]: print alist
[1, 2, [3, 'a', 5, 'sub'], 6, 7, 'b']

In [24]: alist[2].append(10)

In [25]: print alist
[1, 2, [3, 'a', 5, 'sub', 10], 6, 7, 'b']

In [26]: print dlist
[1, 2, [3, 'a', 5, 'sub'], 6, 7, 'b']
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 文/阿敏其人本文出自“阿敏其人”简书博客,转载请取得本人同意。 首先,我们知道Python3中,有6个标准的数据类...
    阿敏其人阅读 20,107评论 4 17
  • 直接进入正题! 一.赋值“=” python赋值操作的最终结果是将变量指向某个内存中的对象,只是引用。但不同的赋值...
    马尔代夫Maldives阅读 4,814评论 1 5
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,887评论 1 32
  • 公元前518年,孔丘入洛邑,览守藏室公元前520年,李耳出洛邑,奔函谷关 孔丘收徒,有教无类李耳出关,骑青牛,携竹...
    天书阅读 1,859评论 0 0
  • 2018.6.14日贴 明明将你锁在梦土上,经书日月、粉黛春秋, 还允许你闲来写诗,你却飞越关岭,趁着行岁未晚,到...
    迷鹿mirror阅读 1,724评论 0 0

友情链接更多精彩内容