美文网首页
python赋值、浅拷贝和深拷贝

python赋值、浅拷贝和深拷贝

作者: 清水咸鱼 | 来源:发表于2019-04-23 22:50 被阅读0次

简介

  python中关于对象复制有三种类型:直接赋值、浅拷贝和深拷贝,他们既有联系又有区别。在python中,“类型”属于“对象”,“变量”是没有“类型”的。所有的变量都可以理解是内存中一个对象的“引用”。所以,我们需要把“变量”和真正的“内存对象”分开。

直接赋值

  在python中赋值语句是建立对象的引用值,而不是复制对象。因此,python变量更像是指针,而不是数据存储区域。因此,直接赋值其实就是其实就是对象的引用(别名)。

浅拷贝(copy)

拷贝父对象,不会拷贝对象的内部的子对象,浅拷贝仅仅复制了容器中元素的地址。

>>> testList = ["a","b","c","d","e"]
>>> testListCopy = testList
>>> testList
    ['a', 'b', 'c', 'd', 'e']
>>> testListCopy
    ['a', 'b', 'c', 'd', 'e']
>>> testList.pop(1)   ## 删除testList一个元素
    'b'
>>> testList
    ['a', 'c', 'd', 'e']
>>> testListCopy     ## testListCopy也发生了改变 
    ['a', 'c', 'd', 'e']
    

深拷贝(deepcopy)

  如果不想出现上面的情况(testListCopy随意testList改变而改变),需要使用深拷贝(deepcopy)方法。
  copy模块的deepcopy方法可以完全拷贝了父对象及其子对象。深拷贝不仅仅拷贝了原始对象自身,也对其包含的值进行拷贝,它会递归的查找对象中包含的其他对象的引用,来完成更深层次拷贝。因此,深拷贝产生的副本可以随意修改而不需要担心会引起原始值的改变。

>>> from copy import deepcopy   ## 导入copy模块
>>> testList = ["a","b","c","d","e"]
>>> testListDeepCopy = deepcopy(testList)
>>> testList
    ['a', 'b', 'c', 'd', 'e']
>>> testListDeepCopy
    ['a', 'b', 'c', 'd', 'e']
>>> testList.pop(0)    ## 删除testList中的元素
    'a'
>>> testList.pop(1)
    'c'
>>> testList
    ['b', 'd', 'e']
>>> testListDeepCopy   ## testListDeepCopy没有发生改变
    ['a', 'b', 'c', 'd', 'e']

参考链接

理解python里的赋值、引用、拷贝及作用域、内存管理、垃圾回收

python基础(5):深入理解python中的赋值、引用、拷贝、作用域

你真得理解python的浅拷贝和深拷贝吗?

相关文章

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

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

  • 简介深浅拷贝

    深浅拷贝 python 直接赋值,浅拷贝和深拷贝 直接赋值 其实就是对象的引用 (可以理解成浅拷贝) 浅拷贝: 拷...

  • Python底层|赋值 浅拷贝 深拷贝

    参考 python中的深拷贝和浅拷贝问题python的复制,深拷贝和浅拷贝的区别 结论 总体来说,赋值只是增加了一...

  • python深拷贝和浅拷贝详解

    对于python来说,有两种拷贝类型,浅拷贝和深拷贝 但要注意的是= 不是浅拷贝也不是深拷贝,赋值是新建了一个引用...

  • python的浅拷贝和深拷贝

    对于不可变类型,浅拷贝和深拷贝没有区别 对于不可变类型 赋值 浅拷贝 深拷贝

  • Python中的赋值及深浅拷贝

    Python中的赋值及深浅拷贝 赋值 示例 打印 浅拷贝 示例 打印 深拷贝 示例 打印 三层列表演示 示例 打印

  • python 深拷贝与浅拷贝

    图解 Python 深拷贝和浅拷贝

  • python赋值、浅拷贝和深拷贝

    简介   python中关于对象复制有三种类型:直接赋值、浅拷贝和深拷贝,他们既有联系又有区别。在python中,...

  • 深拷贝 浅拷贝

    深入认识深拷贝 浅拷贝 公共方法 // 深拷贝 浅拷贝 对于基本类型来说 对于赋值操作 就是 深拷贝 因为值...

  • PHP之剑走偏锋的DeepCopy

    php的深拷贝和浅拷贝问题,普通变量对象的赋值 = 是深拷贝,& 是浅拷贝。 输出结果: 类对象的拷贝问题就得看下...

网友评论

      本文标题:python赋值、浅拷贝和深拷贝

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