python深拷贝和浅拷贝区别对比解析

  

这篇文章主要介绍了python深拷贝和浅拷贝区别对比解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  

首先先看一段代码

        进口复制=(1、2、3,[4]]   b=一个   c=a.copy ()   d=copy.deepcopy (a)   e=copy.copy (a)   a.append (4)   一个[3].append (5)   打印(“一个值为{}地址为{}”。格式(一个id ()))   print (" b值为{}地址为{}”。格式(b, id (b)))   打印(' c值为{}地址为{}”。格式(c, id (c)))   打印(' d值为{}地址为{}”。格式(d id (d)))   打印(' e值为{}地址为{}”。格式(e, id (e)))      

执行结果:

        一个值为(1、2、3,(4、5),4]地址为4555940360   b值为1、2、3,(4、5),4]地址为4555940360   (1、2、3 c值为,[4,5]]地址为4555873544   (1、2、3 d值为,[4]]地址为4556227912   e值为1、2、3,[4,5]]地址为4556227464      

从结果中可以看出来:

  

b赋值的为一个的内存地址,值会随着一个的变化而变化——直接赋值,对象引用

  

c=a.copy()使用的为python自带副本的方法,从结果中可看出复制后c的地址与一个的地址不一致,也就是c将的值完全复制包括地址,其结果就是c的值不会随着一个的值变化而变化- - -深拷贝,完全拷贝了父对象及其子对象

  

d和e使用的是python自带的复制模块中复制的方法和deepcopy方法:

  

其中d的值地址和一个不一致,值也不会随着一个的变化而变化- - -深拷贝,完全拷贝了父对象及其子对象

  

其中e中父级内容不随着一个的变化而变化,但e中子列表中内容会随着一个的变化而变化——浅拷贝,拷贝父对象,不会拷贝对象的内部的子对象

        print(“子对象值为{}地址为{}”。格式([3],id ([3])))   打印(' e子对象值为{}地址为{}”。格式([3],id ([3])))   结果:   一子对象值为(4、5)地址为4334486344   e子对象值为(4、5)地址为4334486344      

由上可得出,python中分的副本为三种:

  

1,直接复制:也就是对象引用

  

2,浅拷贝:拷贝父对象,不会拷贝对象的内部的子对象。

  

3,深拷贝:完全拷贝了父对象及其子对象

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

python深拷贝和浅拷贝区别对比解析