Python基礎(chǔ)教程之淺拷貝和深拷貝實例詳解
更新時間:2017年07月15日 10:11:32 作者:蘇打水解渴
這篇文章主要介紹了Python基礎(chǔ)教程之淺拷貝和深拷貝實例詳解的相關(guān)資料,需要的朋友可以參考下
Python基礎(chǔ)教程之淺拷貝和深拷貝實例詳解
網(wǎng)上關(guān)于Python的深拷貝和淺拷貝的文章很多,這里對三種拷貝進行比較并附實例,大家可以參考下
一般的復(fù)制
#encoding:utf-8 #定義一個嵌套集合 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)容也會跟著修改 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]]]
通過以上實踐會發(fā)現(xiàn),復(fù)制操作就是將lista在內(nèi)存中指向的地址,也讓listb指向他,本身并沒有在內(nèi)存中創(chuàng)建地址。
淺拷貝
#encoding:utf-8 #定義一個嵌套集合 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ū)別, #打印元素中的第一個元素的地址值 print id(lista[0])#140666751466536 print id(listb[0])#140666751466536 #元素的地址值是一樣的,是不是意思就是,改變lista中的第一個元素, # 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),竟然沒有跟著lista一起改變,為什么呢,因為使用了淺拷貝唄 #我們在打印下lista[0]和listb[0]的地址 print id(lista[0]) #140666751466560 print id(listb[0]) #140666751466536 #會發(fā)現(xiàn)lista[0]重新指向內(nèi)存中的其他地址 #這時候可以通過以上的方法,修改lista[3],lista[3]也是一個list print id(lista[3])#4499779240 print id(listb[3])#4499779240 #修改lista[3]中第一個元素呢 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]也會跟著改變
根據(jù)以上實踐說明,淺拷貝對對象中對象沒有拷貝。
深拷貝
#encoding:utf-8 #定義一個嵌套集合 import copy lista=[1,2,3,[4,5,6,[7,8,9]]] #深拷貝功能是在淺拷貝上做的加強,所以具備淺拷貝的功能 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]]] #深拷貝會解決修改lista[3][0]值不會影響listb中的值 #再來修改下第三層列表中元素是不是也完成拷貝 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]]] #沒有受到任何影響
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Python趣味挑戰(zhàn)之用pygame實現(xiàn)簡單的金幣旋轉(zhuǎn)效果
今天教大家怎么用pygame實現(xiàn)簡單的金幣旋轉(zhuǎn)效果,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05如何使用Python 抓取和優(yōu)化所有網(wǎng)站圖像
我發(fā)布了一個通過FTP自動優(yōu)化新圖像的教程。這次我們將抓取整個網(wǎng)站,并在本地優(yōu)化我們遇到的圖像,按URL組織,怎么來操作呢,下面跟隨小編一起學(xué)習(xí)使用Python 抓取和優(yōu)化所有網(wǎng)站圖像的方法,感興趣的朋友一起看看吧2023-02-02