Python深淺拷貝理解

python中關(guān)于對象復(fù)制有三種類型的使用方式咆霜,賦值、淺拷貝與深拷貝嘶朱。他們既有區(qū)別又有聯(lián)系蛾坯,剛好最近碰到這一類的問題,研究下疏遏。

一脉课、賦值
在python中,對象的賦值就是簡單的對象引用财异,這點(diǎn)和C++不同倘零。如下:
list_a = [1,2,3,"hello",["python","C++"]]
list_b = list_a
這種情況下,list_b和list_a是一樣的宝当,他們指向同一片內(nèi)存视事,list_b不過是list_a的別名胆萧,是引用庆揩。
我們可以使用 list_b is list_a 來判斷,返回true跌穗,表明他們地址相同订晌,內(nèi)容相同。也可使用id(x) for x in list_a, list_b 來查看兩個(gè)list的地址蚌吸。
賦值操作(包括對象作為參數(shù)锈拨、返回值)不會(huì)開辟新的內(nèi)存空間,它只是復(fù)制了新對象的引用羹唠。也就是說奕枢,除了list_b這個(gè)名字以外,沒有其它的內(nèi)存開銷佩微。
修改了list_a缝彬,就影響了list_b;同理哺眯,修改了list_b就影響了list_a谷浅。

二、淺拷貝(shallow copy)
淺拷貝會(huì)創(chuàng)建新對象奶卓,其內(nèi)容是原對象的引用一疯。
淺拷貝有三種形式:切片操作,工廠函數(shù)夺姑,copy模塊中的copy函數(shù)
比如對上述list_a墩邀,
切片操作:list_b = list_a[:] 或者 list_b = [each for each in list_a]
工廠函數(shù):list_b = list(list_a)
copy函數(shù):list_b = copy.copy(list_a)
淺拷貝產(chǎn)生的list_b不再是list_a了,使用is可以發(fā)現(xiàn)他們不是同一個(gè)對象盏浙,使用id查看眉睹,發(fā)現(xiàn)它們也不指向同一片內(nèi)存留潦。但是當(dāng)我們使用 id(x) for x in list_a 和 id(x) for x in list_b 時(shí),可以看到二者包含的元素的地址是相同的辣往。
在這種情況下兔院,list_a和list_b是不同的對象,修改list_b理論上不會(huì)影響list_a站削。比如list_b.append([4,5])坊萝。
但是要注意,淺拷貝之所以稱為淺拷貝许起,是它僅僅只拷貝了一層十偶,在list_a中有一個(gè)嵌套的list,如果我們修改了它园细,情況就不一樣了惦积。
list_a[4].append("C")。查看list_b猛频,你將發(fā)現(xiàn)list_b也發(fā)生了變化狮崩。這是因?yàn)椋阈薷牧饲短椎膌ist鹿寻。修改外層元素睦柴,會(huì)修改它的引用,讓它們指向別的位置毡熏,修改嵌套列表中的元素坦敌,列表的地址并為發(fā)生變化,指向的都是同一個(gè)位置痢法。

三狱窘、深拷貝(deep copy)
深拷貝只有一種形式,copy模塊中的deepcopy函數(shù)财搁。
和淺拷貝對應(yīng)蘸炸,深拷貝拷貝了對象的所有元素,包括多層嵌套的元素妇拯。因而幻馁,它的時(shí)間和空間開銷要高。
同樣對list_a越锈,若使用list_b = copy.deepcopy(list_a)仗嗦,再修改list_b將不會(huì)影響到list_a了。即使嵌套的列表具有更深的層次甘凭,也不會(huì)產(chǎn)生任何影響稀拐,因?yàn)樯羁截惓鰜淼膶ο蟾揪褪且粋€(gè)全新的對象,不再與原來的對象有任何關(guān)聯(lián)丹弱。

四德撬、關(guān)于拷貝操作的警告
1铲咨、對于非容器類型,如數(shù)字蜓洪,字符纤勒,以及其它“原子”類型,沒有拷貝一說隆檀。產(chǎn)生的都是原對象的引用摇天。
2、如果元組變量值包含原子類型對象恐仑,即使采用了深拷貝泉坐,也只能得到淺拷貝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裳仆,一起剝皮案震驚了整個(gè)濱河市腕让,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌歧斟,老刑警劉巖纯丸,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異构捡,居然都是意外死亡液南,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門勾徽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人统扳,你說我怎么就攤上這事喘帚。” “怎么了咒钟?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵吹由,是天一觀的道長。 經(jīng)常有香客問我朱嘴,道長倾鲫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任萍嬉,我火速辦了婚禮乌昔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壤追。我一直安慰自己磕道,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布行冰。 她就那樣靜靜地躺著溺蕉,像睡著了一般伶丐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上疯特,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天哗魂,我揣著相機(jī)與錄音,去河邊找鬼漓雅。 笑死啡彬,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的故硅。 我是一名探鬼主播庶灿,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吃衅!你這毒婦竟也來了往踢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤徘层,失蹤者是張志新(化名)和其女友劉穎峻呕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體趣效,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瘦癌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跷敬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片讯私。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖西傀,靈堂內(nèi)的尸體忽然破棺而出斤寇,到底是詐尸還是另有隱情,我是刑警寧澤拥褂,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布娘锁,位于F島的核電站,受9級特大地震影響饺鹃,放射性物質(zhì)發(fā)生泄漏莫秆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一悔详、第九天 我趴在偏房一處隱蔽的房頂上張望镊屎。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽摊求。三九已至吼拥,卻和暖如春溪掀,著一層夾襖步出監(jiān)牢的瞬間光稼,已是汗流浹背齿拂。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工驳规, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人署海。 一個(gè)月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓吗购,卻偏偏與公主長得像,于是被迫代替她去往敵國和親砸狞。 傳聞我的和親對象是個(gè)殘疾皇子捻勉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容

  • http://python.jobbole.com/85231/ 關(guān)于專業(yè)技能寫完項(xiàng)目接著寫寫一名3年工作經(jīng)驗(yàn)的J...
    燕京博士閱讀 7,571評論 1 118
  • 個(gè)人筆記,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,696評論 0 5
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法刀森,類相關(guān)的語法踱启,內(nèi)部類的語法,繼承相關(guān)的語法研底,異常的語法埠偿,線程的語...
    子非魚_t_閱讀 31,622評論 18 399
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,072評論 25 707
  • 我有個(gè)朋友小a,越來越覺得不是一路人榜晦,處不下去了冠蒋。 穿著她自認(rèn)為質(zhì)量好的衣服,戴著幾百塊淘來的項(xiàng)鏈乾胶,然后自認(rèn)為自己...
    粉色滴淚魚閱讀 177評論 0 0