python的深浅拷贝

2021-02-11 18:20

阅读:715

标签:浅拷贝   text   ann   一个   第一个   数据   不可变类   相同   会同   

浅拷贝后,改变原始对象中为可变类型的元素的值,会同时影响拷贝对象;改变原始对象中为不可变类型的元素的值,不会响拷贝对象。

地址是完全一致的。

 

#定义一个列表,第一个元素是可变类型
>>> A = [[2],fei‘,90]
#浅拷贝 >>> B = copy.copy(A)
#对象地址是否相同 >>> A is B False
#改变第一个可变类型的值,查看复制对象变化 >>> A[0]= 2 >>> A [[2], fei‘, 90]
#复制对象也跟着改变了 >>> B [[2], fei‘, 90]
#改变第二个不可变类型的值,查看复制对象变化 >>> A[1] = anne‘ >>> A [[2], anne‘, 90]
#复制对象没有改变 >>> B [[2], fei‘, 90]

 

a 和 b 完全拷贝了父对象及其子对象,两者是完全独立的。
深拷贝,除了顶层拷贝,还对子元素也进行了拷贝。
经过深拷贝后,原始对象和拷贝对象所有的可变元素地址都没有相同的了。

 

#深拷贝
>>> C = copy.deepcopy(A)
#改变第一个元素,查看复制元素变化 >>> A[0]= 3 >>> A [[3], fei‘, 90]
#复制元素不变,对复制元素没影响 >>> C [[1], fei‘, 90]

 

#改变第二个元素,查看复制元素变化

 

>>> A[1] = Anne
>>> A
[[3], ‘Anne‘, 90]

>>> C
[[2], ‘fei‘, 90]

 

很显然:从数据的不可变而言,浅拷贝是面向不可变类型的;而深拷贝是面向可变类型的处理

注意:这两者与赋值引用不同,在赋值引用中无可变与不可变的类型之分。一旦一个数据改变同类型的也会改变。

 

python的深浅拷贝

标签:浅拷贝   text   ann   一个   第一个   数据   不可变类   相同   会同   

原文地址:https://www.cnblogs.com/topass123/p/12735192.html


评论


亲,登录后才可以留言!