Python深拷贝和浅拷贝详解,Python 浅拷贝

  Python深拷贝和浅拷贝详解,Python 浅拷贝

  本文主要介绍Python深层拷贝和浅层拷贝参考。Python没有复制这个对象,只是复制了这个对象的引用。以下具体相关介绍需要朋友们参考。

  00-1010 (1),存在父对象和子对象(2),如果仅存在父对象前言:

  在Python中,对象赋值本质上是对对象的引用。在创建一个对象并赋给另一个变量时,Python并没有复制这个对象,只是复制了这个对象的引用。这里通过程序,使用Python中的复制模块,进一步理解深度复制、浅层复制和对象赋值的区别。

  这里分两种情况:

  

目录

  演示代码如下:

  Import #调用复制模块。

  Dict={animal : cat , num 3360 [10,20,30], color 3360 pink} #创建新词典

  Dict1_copy=Dict.copy() #轻型副本

  dict 1 _ dcopy=copy . deep copy(dict)#深层复制

  Dict2=Dict #直接赋值对象是一个浅层拷贝。

  Dict[num][1]=66 #修改创建的字典的内部值

  Print (dict3360 str (dict)) #输出修改后的字典数据

  print( dict 1 _ copy 3360 str(dict 1 _ copy))#输出轻拷贝数据,数据被修改。

  print( dict 1 _ dcopy : str(dict 1 _ dcopy))#输出深度复制的数据,该数据没有被修改。

  Print(Dict2: str(Dict2)) #对象赋值,数据修改

  运行结果如下:

  

(1)、存在父对象和子对象

  演示代码如下:

  Import #调用复制模块。

  Dict={animal 3360 cat , num 3360 10 , color 3360 pink} #创建新词典

  Dict1_copy=Dict.copy() #轻型副本

  dict 1 _ dcopy=copy . deep copy(dict)#深层复制

  Dict2=Dict #浅拷贝,直接分配对象

  Dict[animal]=dog #修改创建的字典的内部值。

  Print (dict3360 str (dict)) #输出修改后的字典数据

  print( dict 1 _ copy 3360 str(dict 1 _ copy))#轻拷贝,但结果和深拷贝一样。

  print( dict 1 _ dcopy : str(dict 1 _ dcopy))#输出深度复制的数据,该数据没有被修改。

  Print(Dict2: str(Dict2)) #对象赋值,数据修改

  运行结果如下:

  可以看出,数据修改后,深层副本不会被修改;如果浅层拷贝中有所谓的父对象和子对象,也就是嵌套,那么可以修改第二层,这与深层拷贝是不同的。如果没有嵌套,只有父对象,虽然本质上不同于深层拷贝,但不会被修改。对象赋值是一个引用,随着修改而变化。

  这里有一个简单的例子,改变一个特定值对其他值的影响:

  Dict_A={#建立一个新字典

   A:11,

   B:22,

  :[33,44,55]

  }

  Dict_B=Dict_A #赋值操作

  Dict_C=Dict_A.copy() #轻型副本

  Dict_D=copy.deepcopy(Dict_A) #深层复制

  print(Dict_A: str(Dict_A))

  print(Dict_B: str(Dict_B))

  print(Dict_C: str(Dict_C))

  print(Dict_D: str(Dict_D))

  #在字典中修改_ D

  字典D[A]=99

  打印( dict _ a: str (dict _ a)) #更改

  打印( dict _ b: str (dict _ b)) #更改

  print( dict _ c : str(dict _ c))#不变

  print( dict _ d : str(dict _ d))#未更改

  #在字典B中修改a

  字典B[A]=77

  打印( dict _ a: str (dict _ a)) #更改

  打印( dict _ b: str (dict _ b)) #更改

  print( dict _ c : str(dict _ c))#不变

  print( dict _ d : str(dict _ d))#未更改

  #在字典C中修改a

  字典C[A]=88

  print( dict _ a : str(dict _ a))#不变

  print( dict _ b : str(dict _ b))#未更改

  打印( dict _ c: str (dict _ c)) #更改

  print( dict _ d : str(dict _ d))#未更改

  #在字典中修改_ D

  字典D[A]=99

  print( dict _ a : str(dict _ a))#不变

  print( dict _ b : str(dict _ b))#未更改

  print( dict _ c : str(dict _ c))#不变

  Print (dict _ d: 字符串(dict _ d)) # change

  #修改dict _ a中C的第二项。

  Dict_C[C][1]=100

  打印( dict _ a: str (dict _ a)) #更改

  打印( dict _ b: str (dict _ b)) #更改

  打印( dict _ c: str (dict _ c)) #更改

  print( dict _ d : str(dict _ d))#未更改

  #修改Dict_B中C的第二项

  Dict_C[C][1]=101

  打印( dict _ a: str (dict _ a)) #更改

  打印( dict _ b: str (dict _ b)) #更改

  打印( dict _ c: str (dict _ c)) #更改

  print( dict _ d : str(dict _ d))#未更改

  #修改dict _ C中C的第二项。

  Dict_C[C][1]=102

  打印( dict _ a: str (dict _ a)) #更改

  打印( dict _ b: str (dict _ b)) #更改

  打印( dict _ c: str (dict _ c)) #更改

  print( dict _ d : str(dict _ d))#未更改

  #修改Dict_D中C的第二项

  字典D[C][1]=104

  print( dict _ a : str(dict _ a))#不变

  print( dict _ b : str(dict _ b))#未更改

  print( dict _ c : str(dict _ c))#不变

  Print (dict _ d: 字符串(dict _ d)) # change

  关于Python深度复制和浅层复制参考的这篇文章到此为止。关于Python copy的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望你以后能支持风行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: