美文网首页
浅拷贝(引用) VS 深拷贝

浅拷贝(引用) VS 深拷贝

作者: 奥特曼255 | 来源:发表于2018-04-25 23:21 被阅读0次

赋值操作就是浅拷贝(引用)
赋值操作总是储存对象的引用,而不是这些对象的拷贝。

>>> X = [1, 2, 3]
>>> L = ['a', X, 'b']         # Embed references to X's object
>>> D = {'x':X, 'y':2}

上边的例子中,列表有三个引用,修改这三个引用中的任意一个,也会改变另外两个。

>>> X[1] = 'surprise'
>>> L                          # Changes all three references 
['a', [1, 'surprise', 3], 'b']
>>> D
{'x':[1, 'surprise', 3], 'y':2}

如果需要拷贝对象,可用下列四种方法。

  • 没有限制条件的分片表达式(L[:])能够复制序列。
  • 字典 copy 方法(X.copy())能够复制字典。
  • 有些内置函数(例如,list)能够生成拷贝(List(L))。
  • copy 标准库模块能够生成完整拷贝(copy.deepcopy() 递归拷贝所有的组成部分,而 copy.copy() 只拷贝一层)
>>> L = [1, 2, 3]
>>> D = {'a':1, 'b':2}

>>> A = L[:]
>>> B = D.copy()

>>> A[1] = 'Ni'
>>> B['c'] = 'spam'
>>>
>>> L, D
([1, 2, 3], {'a':1, 'b':2})
>>> A, B
([1, 'Ni', 3], {'a':1, 'b':2, 'c':'spam'})

拷贝需要注意的是:无条件值的分片和字典 copy 方法只能做顶层复制。如果你需要一个深层嵌套的数据结构的完整拷贝,那么就要使用标准的 copy 模块——包括 import copy 语句,并编辑 X = copy.deepcopy(Y)。这一调用语句能够递归地遍历对象来复制它们所有的组成部分。

相关文章

  • JS中的深拷贝与浅拷贝

    知乎:js中的深拷贝和浅拷贝? 掘金: js 深拷贝 vs 浅拷贝 前言 首先深拷贝与浅拷贝只针对 Object,...

  • 浅拷贝和深拷贝

    本文参考:JavaScript中的浅拷贝和深拷贝js 深拷贝 vs 浅拷贝深入剖析 JavaScript 的深复制...

  • 浅拷贝(引用) VS 深拷贝

    赋值操作就是浅拷贝(引用)赋值操作总是储存对象的引用,而不是这些对象的拷贝。 上边的例子中,列表有三个引用,修改这...

  • js中的深拷贝和浅拷贝

    一、深拷贝与浅拷贝 深拷贝和浅拷贝只针对Object,Array这些复杂的引用对象。浅拷贝,只复制对象的引用的地址...

  • 面试题iOS

    面试blog 1、深拷贝浅拷贝:浅拷贝就是拷贝对象的指针,而不复制引用对象本身;深拷贝就是拷贝引用对象本身;浅复制...

  • iOS开发 关于copy

    深拷贝和浅拷贝 浅拷贝: 只是拷贝了原对象的地址, 即对原对象的引用+1深拷贝: 并没有引用该对象, 而是...

  • 深拷贝VS浅拷贝

    深拷贝VS浅拷贝 本文主要对深拷贝&浅拷贝的解释及实现做一下简单记录。 之所以会有深拷贝与浅拷贝之分,是因为不同数...

  • Python中的引用赋值,深拷贝,浅拷贝

    摘要:Python,引用赋值,深拷贝,浅拷贝 总结一下Python中的变量的引用赋值,深拷贝和浅拷贝,先上结论 赋...

  • Java深拷贝和浅拷贝的区别

    一、深拷贝和浅拷贝的区别 浅拷贝:对基本数据类型进行值传递,对引用数据类型进行引用传递般的拷贝,此为浅拷贝。 深拷...

  • Python中浅拷贝和深拷贝的区别总结与理解

    单层浅拷贝 单层深拷贝 结论一: 不管深拷贝还是浅拷贝对不可变数据类型都是引用内存地址 不管深拷贝还是浅拷贝对可变...

网友评论

      本文标题:浅拷贝(引用) VS 深拷贝

      本文链接:https://www.haomeiwen.com/subject/lgpulftx.html