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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。