美文网首页
python中深浅拷贝

python中深浅拷贝

作者: 飞跑的蛤蟆 | 来源:发表于2020-05-11 22:10 被阅读0次

在看深浅拷贝之前,我们先看下赋值操作:

  1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址
  2. 修改不可变对象(str、tuple)需要开辟新的空间
  3. 修改可变对象(list等)不需要开辟新的空间

python中所谓的浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象资源的拷贝。

In [52]: f
Out[52]: [5, [6, 7, 8]]

In [53]: id(f)
Out[53]: 1491958758152

In [54]: [id(i) for i in f]
Out[54]: [1937866992, 1491987444104]

In [55]: g = f

In [56]: id(g)
Out[56]: 1491958758152

In [57]: [id(i) for i in g]
Out[57]: [1937866992, 1491987444104]

In [58]: h = f.copy()  # 浅拷贝

In [59]: id(h)
Out[59]: 1491987682568

In [60]: [id(i) for i in h]
Out[60]: [1937866992, 1491987444104]

In [61]: m = f[:]  # 这个也算是浅拷贝

In [62]: id(m)
Out[62]: 1491987751240

In [63]: [id(i) for i in m]
Out[63]: [1937866992, 1491987444104]

In [64]: from copy import deepcopy

In [65]: n = deepcopy(f)  # 深拷贝

In [66]: n
Out[66]: [5, [6, 7, 8]]

In [67]: id(n)
Out[67]: 1491958481928

In [68]: [id(i) for i in n]
Out[68]: [1937866992, 1491956407176]

由上面的代码示例可知,浅拷贝是为拷贝对象开辟一个内存地址,拷贝对象中的元素地址是指向旧对象的内存地址的。深拷贝也是为拷贝对象新建一个内存地址,但是拷贝对象中的元素地址也是新开辟的,只是它们的值一样罢了。

但是上面深拷贝的例子中,数字5的内存地址也是没有变化的,这是为啥呢?不是说好重新开辟的嘛

这就涉及到python的内存驻留机制(小数据池)了

相关文章

  • python中深浅拷贝

    ​ 在看深浅拷贝之前,我们先看下赋值操作: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址 修改不可变对象...

  • Python的深浅拷贝

    前言 在很多语言中都存在深浅拷贝两种拷贝数据的方式,Python中也不例外。本文中详细介绍了Python中的深浅拷...

  • copy见解

    拷贝就是拷贝,何来深浅之说? Python中,对象的赋值,拷贝(深/浅拷贝)之间是有差异的,如果使用的时候不注意,...

  • 零基础小白Python入门必看:通俗易懂,搞定深浅拷贝

    Python中的深浅拷贝 在讲深浅拷贝之前,想先讲一下 is 和==的区别。 在进行对象是否相等比较的时候我们可以...

  • Python中的赋值及深浅拷贝

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

  • 11.Python之深浅拷贝

    Python中的深浅拷贝 浅拷贝浅拷贝只拷贝一个外壳变成自己的,里面的内容是复用的被拷贝对象的。list_1 = ...

  • Python深浅拷贝

    深浅拷贝 首先来个准备知识: list1 = ['我爱你','中国','亲爱的母亲'] list2 = list1...

  • python 深浅拷贝

  • Python深浅拷贝

    在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝...

  • Python深浅拷贝

    预备知识一——python的变量及其存储 在详细的了解python中赋值、copy和deepcopy之前,我们还是...

网友评论

      本文标题:python中深浅拷贝

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