Python基礎(chǔ)教程之淺拷貝和深拷貝實(shí)例詳解
Python基礎(chǔ)教程之淺拷貝和深拷貝實(shí)例詳解
網(wǎng)上關(guān)于Python的深拷貝和淺拷貝的文章很多,這里對(duì)三種拷貝進(jìn)行比較并附實(shí)例,大家可以參考下
一般的復(fù)制
#encoding:utf-8 #定義一個(gè)嵌套集合 lista=[1,2,3,[4,5,6,[7,8,9]]] listb=lista #分別打印出 lista和listb的地址值 print id(lista) #4511103096 print id(listb) #4511103096 #修改lista中的內(nèi)容,listb中的內(nèi)容也會(huì)跟著修改 lista[0]=0 print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]] print listb #[0, 2, 3, [4, 5, 6, [7, 8, 9]]]
通過(guò)以上實(shí)踐會(huì)發(fā)現(xiàn),復(fù)制操作就是將lista在內(nèi)存中指向的地址,也讓listb指向他,本身并沒(méi)有在內(nèi)存中創(chuàng)建地址。
淺拷貝
#encoding:utf-8 #定義一個(gè)嵌套集合 import copy lista=[1,2,3,[4,5,6,[7,8,9]]] #使用copy模塊中copy方法 listb=copy.copy(lista) print id(lista) #4396231640 print id(listb) #4396231712 #發(fā)現(xiàn)lista和listb在內(nèi)存中的地址有區(qū)別, #打印元素中的第一個(gè)元素的地址值 print id(lista[0])#140666751466536 print id(listb[0])#140666751466536 #元素的地址值是一樣的,是不是意思就是,改變lista中的第一個(gè)元素, # listb中的也要改變呢 lista[0]=0 print lista #[0, 2, 3, [4, 5, 6, [7, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #結(jié)果發(fā)現(xiàn),竟然沒(méi)有跟著lista一起改變,為什么呢,因?yàn)槭褂昧藴\拷貝唄 #我們?cè)诖蛴∠耹ista[0]和listb[0]的地址 print id(lista[0]) #140666751466560 print id(listb[0]) #140666751466536 #會(huì)發(fā)現(xiàn)lista[0]重新指向內(nèi)存中的其他地址 #這時(shí)候可以通過(guò)以上的方法,修改lista[3],lista[3]也是一個(gè)list print id(lista[3])#4499779240 print id(listb[3])#4499779240 #修改lista[3]中第一個(gè)元素呢 lista[3][0]=0 print lista #[0, 2, 3, [0, 5, 6, [7, 8, 9]]] print listb #[0, 2, 3, [0, 5, 6, [7, 8, 9]]] #發(fā)現(xiàn)修改lista[3][0]元素的值,listb[3][0]也會(huì)跟著改變
根據(jù)以上實(shí)踐說(shuō)明,淺拷貝對(duì)對(duì)象中對(duì)象沒(méi)有拷貝。
深拷貝
#encoding:utf-8 #定義一個(gè)嵌套集合 import copy lista=[1,2,3,[4,5,6,[7,8,9]]] #深拷貝功能是在淺拷貝上做的加強(qiáng),所以具備淺拷貝的功能 listb=copy.deepcopy(lista) lista[3][0]=0 print lista #[1, 2, 3, [0, 5, 6, [7, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #深拷貝會(huì)解決修改lista[3][0]值不會(huì)影響listb中的值 #再來(lái)修改下第三層列表中元素是不是也完成拷貝 lista[3][3][0]=0 print lista #[1, 2, 3, [0, 5, 6, [0, 8, 9]]] print listb #[1, 2, 3, [4, 5, 6, [7, 8, 9]]] #沒(méi)有受到任何影響
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
python 爬蟲(chóng)爬取京東ps4售賣(mài)情況
這篇文章主要介紹了python 如何用爬蟲(chóng)爬取京東ps4售賣(mài)情況,幫助大家更好的利用python爬取自己想要的數(shù)據(jù),感興趣的朋友可以了解下2020-12-12
Python 面向?qū)ο笾?lèi)class和對(duì)象基本用法示例
這篇文章主要介紹了Python 面向?qū)ο笾?lèi)class和對(duì)象基本用法,結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)class和對(duì)象基本概念、原理、使用方法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02
全網(wǎng)最全python庫(kù)selenium自動(dòng)化使用詳細(xì)教程
這篇文章主要介紹了python庫(kù)selenium自動(dòng)化使用詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2021-01-01
NumPy-ndarray 的數(shù)據(jù)類(lèi)型用法說(shuō)明
這篇文章主要介紹了NumPy-ndarray 的數(shù)據(jù)類(lèi)型用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05
使用python requests模塊發(fā)送http請(qǐng)求及接收響應(yīng)的方法
用 python 編寫(xiě) http request 消息代碼時(shí),建議用requests庫(kù),因?yàn)閞equests比urllib內(nèi)置庫(kù)更為簡(jiǎn)捷,requests可以直接構(gòu)造get,post請(qǐng)求并發(fā)送,本文給大家介紹了使用python requests模塊發(fā)送http請(qǐng)求及接收響應(yīng)的方法,需要的朋友可以參考下2024-03-03

