Python-賦值襟齿、淺拷貝、深拷貝

python的一切變量都是對象枕赵,變量的存儲(chǔ)采用了引用語義的方式猜欺,存儲(chǔ)的只是一個(gè)變量的值所在的內(nèi)存地址,而不是這個(gè)變量的本身拷窜。

基于內(nèi)存地址的分類

Python中的數(shù)據(jù)類型基于內(nèi)存地址分類可以分為:
可變類型: 列表开皿,字典,集合
不可變類型:數(shù)字装黑,字符串副瀑,元組
這里的可變不可變,是指當(dāng)該數(shù)據(jù)類型的對應(yīng)變量的值發(fā)生了改變恋谭,那么它對應(yīng)的內(nèi)存地址是否發(fā)生改變

可變類型
不可變類型
  • 對于不可變類型
    變量的每一次初始化,都開辟了一個(gè)新的內(nèi)存空間挽鞠,同時(shí)將新內(nèi)容的地址賦值給變量疚颊。
    要注意的是,即使變量對應(yīng)的地址發(fā)生改變信认,但舊地址的內(nèi)容其實(shí)并沒有被修改材义,仍在內(nèi)存中,我們可以通過引入ctypes模塊讀取地址的內(nèi)


  • 對于可變類型
    當(dāng)對該數(shù)據(jù)類型中的元素進(jìn)行一些增刪改操作的時(shí)候嫁赏,不會(huì)影響到該變量本身的地址其掂,只會(huì)改變其內(nèi)部元素的地址引用。
    當(dāng)然潦蝇,如果對其重新初始化(賦值)的時(shí)候款熬,就給該變量重新賦予了一個(gè)新的內(nèi)存地址。


賦值

結(jié)合上面對于可變攘乒、不可變數(shù)據(jù)類型的地址存儲(chǔ)及其地址變化的理解贤牛,我們再來討論P(yáng)ython中對變量的賦值。
Python中的賦值類似于c++中的引用则酝,本質(zhì)是對變量對象的引用殉簸,獲得對方所指向的內(nèi)存地址

  • 對于不可變類型
    我們對變量的賦值操作,本質(zhì)上只是把等號右邊的值所在的內(nèi)存地址給了左邊的變量



    從上圖我們可以看出,a般卑、b均通過賦值得到了“hello world”的內(nèi)存地址之后武鲁,即使對a重新賦值,也只是a得到了新建的值的地址蝠检,對已賦值的b沒有影響

  • 對于可變類型


從上圖我們可以看到a洞坑、b均通過賦值得到了一個(gè)列表,雖然表面上我們分別對a蝇率、b列表的內(nèi)容進(jìn)行了修改迟杂,但實(shí)際上修改的卻是內(nèi)存中該列表所指向的內(nèi)部元素,因此本慕,他們的修改會(huì)互相影響(他們本就共用的同一個(gè)列表)

淺拷貝

淺拷貝可用copy模塊中的copy函數(shù)排拷,進(jìn)行淺拷貝時(shí),只會(huì)拷貝該變量元素的地址(可以理解為只拷貝了第一層)锅尘。



我們可以看到监氢,淺拷貝只是新建了一塊內(nèi)存,用于將列表a中的各元素地址拷貝了出來藤违,b得到的是一個(gè)新的內(nèi)存地址浪腐,只不過b所指向的內(nèi)存中各元素地址和a中的相同。
因此顿乒,如果元素是不可變類型议街,則修改只會(huì)改變各自的地址,互相之間沒有影響璧榄,但如果某個(gè)元素是可變類型特漩,則對其內(nèi)容的修改并不會(huì)改變這個(gè)元素本身的地址,就會(huì)互相影響到骨杂。

深拷貝

淺拷貝可用copy模塊中的deepcopy函數(shù)涂身,深拷貝會(huì)完全復(fù)制原變量相關(guān)的所有數(shù)據(jù),在內(nèi)存中生成一套完全一樣的內(nèi)容搓蚪,在這個(gè)過程中我們對這兩個(gè)變量中的一個(gè)進(jìn)行任意修改都不會(huì)影響其他變量蛤售。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妒潭,隨后出現(xiàn)的幾起案子悴能,更是在濱河造成了極大的恐慌,老刑警劉巖杜耙,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搜骡,死亡現(xiàn)場離奇詭異,居然都是意外死亡佑女,警方通過查閱死者的電腦和手機(jī)记靡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門谈竿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人摸吠,你說我怎么就攤上這事空凸。” “怎么了寸痢?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵呀洲,是天一觀的道長。 經(jīng)常有香客問我啼止,道長道逗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任献烦,我火速辦了婚禮滓窍,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巩那。我一直安慰自己吏夯,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布即横。 她就那樣靜靜地躺著噪生,像睡著了一般。 火紅的嫁衣襯著肌膚如雪东囚。 梳的紋絲不亂的頭發(fā)上跺嗽,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天,我揣著相機(jī)與錄音舔庶,去河邊找鬼抛蚁。 笑死,一個(gè)胖子當(dāng)著我的面吹牛惕橙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钉跷,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼弥鹦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爷辙?” 一聲冷哼從身側(cè)響起彬坏,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膝晾,沒想到半個(gè)月后栓始,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡血当,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年幻赚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了禀忆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,773評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡落恼,死狀恐怖箩退,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佳谦,我是刑警寧澤戴涝,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站钻蔑,受9級特大地震影響啥刻,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咪笑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一可帽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蒲肋,春花似錦蘑拯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至孔轴,卻和暖如春剃法,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背路鹰。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工贷洲, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人晋柱。 一個(gè)月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓优构,卻偏偏與公主長得像,于是被迫代替她去往敵國和親雁竞。 傳聞我的和親對象是個(gè)殘疾皇子钦椭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評論 2 354