python中copy和deepcopy的使用區(qū)別
python中標(biāo)識一個對象唯一身份的是:對象的id(內(nèi)存地址),對象類型,對象值。
deepcopy是真正意義上的復(fù)制,深拷貝,被復(fù)制對象完全復(fù)制一遍作為獨立的新個體,新開辟一塊空間。
淺拷貝,不會產(chǎn)生獨立對象,等于賦值,只是對原有數(shù)據(jù)塊打上新標(biāo)簽,其中一個標(biāo)簽改變,數(shù)據(jù)塊就會變化。淺拷貝等于賦值,也可以通過copy實現(xiàn),copy僅拷貝對象本身,淺拷貝不會對其中的子對象進行拷貝,如果對子對象進行修改,拷貝結(jié)果也會隨著修改。
- 復(fù)制的對象中無復(fù)雜子對象,即列表中不嵌套列表,原來值的改變并不會影響淺復(fù)制的值,同時淺復(fù)制的值改變也并不會影響原來的值。原來值的id值與淺復(fù)制原來的值不同。
- 復(fù)制的對象中有復(fù)雜子對象 (例如列表中的一個子元素是一個列表)如果改變復(fù)雜子對象的值(列表中的值)會影響淺復(fù)制的值。
import copy a = [1,2,3,[4,5],1] b = a c = copy.copy(a) d = copy.deepcopy(a) a.append(9) a[3].append(6) print(a) #[1, 2, 3, [4, 5, 6], 1, 9] print(b) #[1, 2, 3, [4, 5, 6], 1, 9] print(c) #[1, 2, 3, [4, 5, 6], 1] print(d) #[1, 2, 3, [4, 5], 1] print(id(a)) #4594148288 print(id(b)) #4594148288 print(id(c)) #4594455328 print(id(d)) #4592688496 x = 'Hello World' y = x z = copy.copy(x) w = copy.deepcopy(x) print(id(x)) #4617118576 print(id(y)) #4617118576 print(id(z)) #4617118576 print(id(w)) #4617118576 # 對于不可變類型(元組、數(shù)值,字符串等)為淺拷貝,對象的id值與淺復(fù)制原來的值相同 # 對于可變類型(列表、字典等)為深拷貝,
到此這篇關(guān)于python中copy和deepcopy的使用區(qū)別的文章就介紹到這了,更多相關(guān)python copy deepcopy內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python pyinstaller打包exe報錯的解決方法
這篇文章主要給大家介紹了關(guān)于python pyinstaller打包exe報錯的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11Django項目中用JS實現(xiàn)加載子頁面并傳值的方法
今天小編就為大家分享一篇Django項目中用JS實現(xiàn)加載子頁面并傳值的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05使用python快速在局域網(wǎng)內(nèi)搭建http傳輸文件服務(wù)的方法
這篇文章主要介紹了使用 python快速在局域網(wǎng)內(nèi)搭建http傳輸文件服務(wù),但是這種方法不要傳輸機密文件,安全性不高,只用到http協(xié)議沒有使用任何加密協(xié)議,具體實現(xiàn)方法跟隨小編一起看看吧2019-11-11Python3+PyInstall+Sciter解決報錯缺少dll、html等文件問題
這篇文章主要介紹了Python3+PyInstall+Sciter解決報錯缺少dll、html等文件問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07