Python學(xué)習(xí)筆記(九)—Python中的賦值、淺拷貝和深拷貝(含圖)

轉(zhuǎn)載請注明出處:http://www.reibang.com/p/db57f7f70a5c
本文出自Shawpoo的簡書
我的博客:CSDN博客

【Python學(xué)習(xí)筆記專欄】:http://blog.csdn.net/column/details/17658.html

在學(xué)習(xí)Python的過程中悍赢,經(jīng)常會對變量進(jìn)行“賦值”,有時候又要對變量的值做臨時處理,而又不能改變原來變量的值啊奄,這就可能用到了“淺拷貝”和“深拷貝”纬朝。所以下面通過具體的例子來區(qū)分它們?nèi)叩牟煌?/p>

另外收叶,大多數(shù)面向?qū)ο蟮恼Z言都會涉及到變量的“賦值”、“淺拷貝”和“深拷貝”共苛,如Python判没,Java或者C++等。

一隅茎、賦值

在Python中澄峰,賦值很簡單,例如辟犀,將一個變量的值賦值給另一個變量俏竞,其實(shí)就是將這兩個變量指向同一個內(nèi)存地址。所以如果這個變量的值改變了堂竟,那么另一個變量的值也會跟著改變魂毁,因?yàn)樗鼈兊膬?nèi)存地址始終相同。例:

a = [1, 2, 3, ['a', 'b', 'c']]
b = a
print(id(a), id(b)) #打印它們各自的內(nèi)存地址
print(a)
print(b)
a.append(4)
print("-----------")
print(id(a), id(b))
print(a)
print(b)
a[3].append('d')
print("-----------")
print(id(a), id(b))
print(a)
print(b)
print(a is b)

執(zhí)行結(jié)果:
2524323181384 2524323181384
[1, 2, 3, ['a', 'b', 'c']]
[1, 2, 3, ['a', 'b', 'c']]
-----------
2524323181384 2524323181384
[1, 2, 3, ['a', 'b', 'c'], 4]
[1, 2, 3, ['a', 'b', 'c'], 4]
-----------
2524323181384 2524323181384
[1, 2, 3, ['a', 'b', 'c', 'd'], 4]
[1, 2, 3, ['a', 'b', 'c', 'd'], 4]
True

通過上述的例子可以看出出嘹,在“賦值”的情況下席楚,變量b的值始終隨著變量a的值改變而改變,也就是內(nèi)存地址始終相同税稼。

圖解: b = a: 賦值引用烦秩,a 和 b 都指向同一個對象刁赦。

直接賦值

二、淺拷貝

淺拷貝闻镶,只拷貝父對象甚脉,不會拷貝父對象中的子對象。如果該對象沒有子對象的話铆农,其淺拷貝和賦值的結(jié)果是一樣的牺氨。淺拷貝可以通過導(dǎo)入copy模塊中的copy()方法來完成,或者調(diào)用對象本身的copy()方法墩剖。例:

import copy # 導(dǎo)入copy模塊
a = [1, 2, 3, ['a', 'b', 'c']]
b = copy.copy(a)   # a.copy()
print(id(a), id(b))
print(a is b)
print(a)
print(b)
a.append(4)
print("-----------")
print(id(a), id(b))
print(a)
print(b)
a[3].append('d')
print("-----------")
print(id(a), id(b))
print(a)
print(b)
print(a is b)
print(a[3] is b[3])

運(yùn)行結(jié)果:
1558199464776 1558199464904
False
[1, 2, 3, ['a', 'b', 'c']]
[1, 2, 3, ['a', 'b', 'c']]
-----------
1558199464776 1558199464904
[1, 2, 3, ['a', 'b', 'c'], 4]
[1, 2, 3, ['a', 'b', 'c']]
-----------
1558199464776 1558199464904
[1, 2, 3, ['a', 'b', 'c', 'd'], 4]
[1, 2, 3, ['a', 'b', 'c', 'd']]
False
True

通過上述的例子可以看出猴凹,我們改變變量a中父對象的值,不會影響變量b岭皂,但是改變變量a中子對象的值郊霎,那么變量b也會隨之改變,這就是淺拷貝爷绘,只拷貝父對象书劝,而不拷貝子對象。

圖解:b = copy.copy(a): 淺拷貝, a 和 b 是一個獨(dú)立的對象土至,但它們的子對象還是指向同一對象(內(nèi)存地址)购对。

淺拷貝

三、深拷貝

深拷貝陶因,也就是完全拷貝骡苞,包括拷貝對象的父對象及其子對象】铮拷貝后是
兩個完全獨(dú)立的對象解幽,互不影響。我們可以通過copy模塊中的deepcopy()方法來完成烘苹。

import copy

a = [1, 2, 3, ['a', 'b', 'c']]
b = copy.deepcopy(a)
print(id(a), id(b))
print(a is b)
print(a)
print(b)
a.append(4)
print("-----------")
print(id(a), id(b))
print(a)
print(b)
a[3].append('d')
print("-----------")
print(id(a), id(b))
print(a)
print(b)
print(a is b)
print(a[3] is b[3])

執(zhí)行結(jié)果:
3143729499336 3143729558024
False
[1, 2, 3, ['a', 'b', 'c']]
[1, 2, 3, ['a', 'b', 'c']]
-----------
3143729499336 3143729558024
[1, 2, 3, ['a', 'b', 'c'], 4]
[1, 2, 3, ['a', 'b', 'c']]
-----------
3143729499336 3143729558024
[1, 2, 3, ['a', 'b', 'c', 'd'], 4]
[1, 2, 3, ['a', 'b', 'c']]
False
False

通過上述的例子可以看出躲株,不管我們改變變量a中父對象的值,還是改變子對象的值螟加,都不會影響變量b的值徘溢,那么說明此時變量a和變量b已經(jīng)完全獨(dú)立吞琐,這就是深拷貝捆探,拷貝父對象及其子對象。

圖解: b = copy.deepcopy(a): 深拷貝, a 和 b 完全拷貝了父對象及其子對象站粟,兩者是完全獨(dú)立的黍图。

深拷貝

總結(jié)

  • 賦值:其實(shí)就是對象地址的引用。
  • 淺拷貝(copy):調(diào)用copy模塊的copy()方法奴烙,只拷貝父對象助被,不會拷貝對象內(nèi)部的子對象剖张。
  • 深拷貝(deepcopy): 調(diào)用copy模塊的deepcopy()方法,完全拷貝了父對象及其子對象揩环。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搔弄,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子丰滑,更是在濱河造成了極大的恐慌顾犹,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褒墨,死亡現(xiàn)場離奇詭異炫刷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)郁妈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門浑玛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人噩咪,你說我怎么就攤上這事顾彰。” “怎么了胃碾?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵拘央,是天一觀的道長。 經(jīng)常有香客問我书在,道長灰伟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任儒旬,我火速辦了婚禮栏账,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘栈源。我一直安慰自己挡爵,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布甚垦。 她就那樣靜靜地躺著茶鹃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艰亮。 梳的紋絲不亂的頭發(fā)上闭翩,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機(jī)與錄音迄埃,去河邊找鬼疗韵。 笑死,一個胖子當(dāng)著我的面吹牛侄非,可吹牛的內(nèi)容都是我干的蕉汪。 我是一名探鬼主播流译,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼者疤!你這毒婦竟也來了福澡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤驹马,失蹤者是張志新(化名)和其女友劉穎竞漾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窥翩,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡业岁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了寇蚊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笔时。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖仗岸,靈堂內(nèi)的尸體忽然破棺而出允耿,到底是詐尸還是另有隱情,我是刑警寧澤扒怖,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布较锡,位于F島的核電站,受9級特大地震影響盗痒,放射性物質(zhì)發(fā)生泄漏蚂蕴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一俯邓、第九天 我趴在偏房一處隱蔽的房頂上張望骡楼。 院中可真熱鬧,春花似錦稽鞭、人聲如沸鸟整。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篮条。三九已至,卻和暖如春吩抓,著一層夾襖步出監(jiān)牢的瞬間涉茧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工琴拧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留降瞳,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓蚓胸,卻偏偏與公主長得像挣饥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子沛膳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

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

  • 摘自: http://www.cocoachina.com/ios/20150803/12872.html 說明...
    program袁閱讀 873評論 1 3
  • 昨天父親節(jié)扔枫,整個朋友圈都在刷屏祝福天下父親節(jié)日快樂。我想到了我那不善言談的父親锹安。 從小到大短荐,只有媽媽陪伴著長大,我...
    言小胡閱讀 139評論 0 1
  • 周末無事叹哭,與朋友閑逛忍宋。本來想找茶馬古道,怎奈山間防火形式緊張风罩,攔下不讓過糠排。只好返出來,路越來越窄超升,盤山下來入宦,看見一...
    天蟬女閱讀 295評論 0 1
  • 圖文無關(guān) 一乾闰、家大家小夠住就好,只要有心愛的人做伴盈滴,哪怕陋室又何防涯肩?關(guān)鍵是白天醒的開心,晚上睡的舒心巢钓。 二宽菜、男人什...
    身心驛站閱讀 495評論 0 0