Python中的復(fù)制、淺拷貝與深拷貝解讀
1.對象的三要素
id、type以及value,id唯一標(biāo)識一個(gè)對象,相當(dāng)于地址,id一樣,說明就是同一個(gè)東西。type和value就是字面意思。
2.==和is
==比較的是value,is比較的是id,意思是 “是否為同一個(gè)對象”,條件比==要嚴(yán)格。
3.可變對象/不可變對象
Python一切均是對象,不可變對象有:數(shù)字、字符串、元組等,為什叫不可變對象呢?難道我不能為一個(gè)整形變量重新賦值?相信一定也有這種疑問,下面看個(gè)例子:

看的出來,為a重新賦值,其實(shí)是令a指向了另一個(gè)對象,字符串,元組也一個(gè)道理,對指向此類對象的變量做修改,只是使其指向了另外一個(gè)對象。
而對于可變對象,如list,如下圖所示,修改后id不變,還是這個(gè)東西

4.賦值、淺拷貝與深拷貝
對于不可變對象,這三者作用一樣,均是使得新變量指向這個(gè)不可變對象,因此id都是一樣的:

對于可變對象,賦值是最簡單省事的,如b=a,意思是直接使得a指向b代表的對象,兩者id一樣,指向同一個(gè)對象,一個(gè)修改,另一個(gè)也隨之變化:

而淺拷貝copy.copy則是另外新建出一個(gè)對象,如a=[1,2,[1,2]],b=copy.copy(a),a與b的id不同,但里面內(nèi)容所指還是相同,比如a[2]和b[2]仍然指向同一個(gè)對象,修改其中一個(gè),另外一個(gè)也會變:

深拷貝則是完全復(fù)制一份,還是上面那個(gè)例子,深拷貝后,非但a和b的id不同。連里面的對象id也不同(不可變對象除外),一個(gè)修改并不會影響另一個(gè),如下圖:

以上為個(gè)人拙見,如有不對,還望指出。
到此這篇關(guān)于Python中的復(fù)制、淺拷貝與深拷貝解讀的文章就介紹到這了,更多相關(guān)Python復(fù)制與淺拷貝與深拷貝內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在Python中操作列表之list.extend()方法的使用
這篇文章主要介紹了在Python中操作列表之list.extend()方法的使用,是Python入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05
Python下利用BeautifulSoup解析HTML的實(shí)現(xiàn)
這篇文章主要介紹了Python下利用BeautifulSoup解析HTML的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Python設(shè)計(jì)與實(shí)現(xiàn)一個(gè)節(jié)假日統(tǒng)計(jì)器
這篇文章主要介紹了一個(gè)基于Python Tkinter開發(fā)的智能節(jié)假日統(tǒng)計(jì)器,能夠準(zhǔn)確顯示中國法定節(jié)假日、調(diào)休安排,并提供直觀的日歷視圖和統(tǒng)計(jì)功能,感興趣的可以了解下2025-10-10
Python機(jī)器學(xué)習(xí)應(yīng)用之樸素貝葉斯篇
樸素貝葉斯模型是一組非常簡單快速的分類算法,通常適用于維度非常高的數(shù)據(jù)集。因?yàn)檫\(yùn)行速度快,而且可調(diào)參數(shù)少,因此非常適合為分類問題提供快速粗糙的基本方案2022-01-01
Python3使用QT編寫基礎(chǔ)的對話框程序的詳細(xì)流程
Qt框架憑借其跨平臺能力和豐富的控件庫,在桌面應(yīng)用開發(fā)領(lǐng)域占據(jù)重要地位,當(dāng)Python的簡潔語法遇上Qt的成熟生態(tài),便誕生了PyQt/PySide這兩個(gè)黃金搭檔,本文給大家介紹了Python3如何使用QT編寫基礎(chǔ)的對話框程序,需要的朋友可以參考下2025-06-06
python實(shí)戰(zhàn)游戲之史上最難最虐的掃雷游戲沒有之一
這篇文章主要介紹了使用 python 實(shí)現(xiàn)掃雷游戲,不同于傳統(tǒng)過時(shí)的掃雷,今天我們用 Python 增加了新花樣,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09

