python中的深浅拷贝,python中深浅拷贝的区别
一、浅拷贝
浅层副本是对象的顶级副本。通俗地说,就是抄袭了参考文献但没有抄袭内容。
a=[1,2,3]
打印(id(a))
b=a
打印(b)
打印(id(b))
a .追加(4)
打印(一份)
打印(b)操作的结果是:
1965053928072
[1,2,3]
1965053928072
[1,2,3,4]
[1,2,3,4]二、深拷贝
深度复制是指在所有级别复制一个对象,内存地址被重新打开。
导入副本
a=[1,2,3]
打印(id(a))
#使用复制模块
b=copy.deepcopy(a)
#打印b的内存地址。
打印(id(b))
a .追加(4)
打印(一份)
打印(b)操作的结果是:
2035157969672
2035158105992
[1,2,3,4]
[1,2,3]相关推荐:《Python视频教程》
三、深浅拷贝对比
导入副本
a=[1,2,3]
b=[4,5,6]
c=[甲,乙]
D=c#直接赋值,浅层复制
print( c 的内存地址是:%s%id(c))
打印( d的内存地址是:%s%id(d))
#使用复制模块
#深度复制,重新打开内存,内容独立。
e=copy.deepcopy(c)
#深度复制,重新打开内存,但原引用仍保存在新内容中。
f=copy.copy(c)
#打印E,f的地址。
print(e的内存地址是:%s%id(e))
print(f的内存地址是:%s%id(f))
#更改a的值
a .追加(44)
#打印a、b、c、d、e、f
打印( a=%s%a
打印( b=%s%b )
打印( c=%s%c )
打印( d=%s%d )
打印( e=%s%e )
Print(f=%s%f )按如下方式运行:
c的内存地址是:2514746494856
d的内存地址是:2514746494856
e的内存地址是:2514746494920。
f的内存地址是:2514746494664
a=[1,2,3,44]
b=[4,5,6]
c=[[1,2,3,44]、[4,5,6]]
d=[[1,2,3,44]、[4,5,6]]
e=[[1,2,3]、[4,5,6]]
F=[[1,2,3,44],[4,5,6]]描述:
1.C和D的内存地址相同,说明是浅拷贝,两个引用指向同一块内存。
2.C、E、F的内存地址是不一样的,也就是说E和F都是深度副本,都是新打开的内存地址。
3.元素44加到A后,打印的E有一个加44,表示深层副本在内容上是独立的。
4.在将元素44添加到A之后,44也被添加到打印的F,这意味着F也重新打开了内存,但是原始引用被保存在新内容中。
四、copy对可变和不可变对象的不同
1.变量类型使用复制。
导入副本
a=[1,2,3]
b=copy.copy(a)
打印(id(a))
打印(id(b))
a .追加(4)
打印(一份)
打印(b)操作的结果是:
1626677717832
1626677715784
[1,2,3,4]
[1,2,3]2.对不可变类型使用复制。
导入副本
a=(1,2,3)
b=copy.copy(a)
打印(id(a))
打印(id(b))的结果是:
2043444280704
2043444280704总结:
简单的作业是浅显的抄写。
复制模块中的copy()函数可以进行深度复制。尽管打开了一个新的存储器,但原始参考仍然存储在新的存储器中。
复制模块中的deepcopy()函数是深度复制,它重新打开内存,新值保存在内存中。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。