<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      問題解析:Python中的變量復制備份,為什么沒有達到效果?

      0
      分享至

      背景

      在運用Python進行開發代碼過程中,會遇到變量復制備份的場景,但并沒有得到預期的結果,例如下面的例子:



      lista = ['a', 'b', [1, 2, 3]]

      listb = lista.copy()

      lista[2].append(4)

      print(lista) # ['a', 'b', [1, 2, 3, 4]]

      print(listb) # ['a', 'b', [1, 2, 3, 4]]

      代碼本意是將lista復制給listb做個備份,再修改liasta,但是修改后發現listb也一并被修改了,沒有達到備份的效果,這個是什么原因呢?

      存儲方式

      首先了解一下Python的變量在內存中的存儲方式。在基本數據類型中(包括set、list(tuple, str)、dict)都是采用引用的方式。

      也就是說,每個變量都存儲的是這個變量的地址,而不是值本身,就算更復雜的嵌套結構,也是存儲是每個元素的地址而已,用一幅圖來表示。



      如上圖所示,用戶看到的是 lista的4個元素值,但是內存中保存的卻是4個元素地址。

      當元素是列表時,第一層保存的是列表的地址,第二層保存的是列表元素的地址,第三層才是列表的值。當元素是字典的時候,與列表類似。

      列表的增刪改

      在明白了變量存儲方式后,繼續看下內存下的增刪改是怎么變化的。

      列表修改已有值

      新增一個內存塊,再將引用的地址修改為新內存塊的地址。



      列表新增一個值

      新增一個內存塊,新增一個地址引用。



      列表整體重新賦值

      刪除變量地址和引用的值,新增地址和引用值的內存塊。



      copy與deepcopy的區別

      基于以上的理解,再來看兩種copy的區別就會更容易理解了,首先記住一個原則:

      copy:不管多么復雜的數據結構,淺拷貝都只會copy一層。

      deepcopy:將整個變量內存全部復制一遍,新變量與原變量沒有任何關系。

      舉個例子來驗證一下上面的結論:有如下的一段代碼,最終的4個列表值是多少?

      注意:引用deepcopy需要導入copy庫。

      import copy

      a = [1, 2, 3, 4, ['a', 'b']]

      b = a

      c = copy.copy(a)

      d = copy.deepcopy(a)

      a.append(5)

      a[1] = 20

      a[4].append('c')

      del a[0]

      print(a)

      print(b)

      print(c)

      print(d)

      列表b

      表示b也引用的a的地址,兩者引用的內存地址是一樣的。因此b和a的關系是緊密相連的,一模一樣。可以通過 id(a) 和id(b)比較,兩者是一樣的。

      列表c

      由于c是淺拷貝的a列表,因此只copy了第一層,也就是地址層。

      所以,當a.append(5)時,新增了一個內存塊,但是c只有前5個內存塊,因此c沒有變化。

      繼續a修改了a[1],然而這個值是屬于第一層,已經copy給了c,因此c也沒有變化。

      繼續a修改了子列表,這個時候a復制給c的只是列表的地址,且a中的子列表地址和c中的子列表地址是指向同一個地方的,因此修改了a中子列表,c中的子列表也會相應的改變。

      最后刪除a[0],與修改a[1]一致,與c無關。可以用圖再說明一下。



      列表d

      由于d是深拷貝的a列表,因此d是將a的地址和值一并復制過來,與a沒有半點關系,也就是說d和a是兩個完全獨立的內存塊,沒有任何交集。因此,后面a的任意修改都與d無關,用圖表示如下。



      因此,程序運行出來后的結果就是:

      a:[20,3,4,['a','b','c'],5]

      b:[20,3,4,['a','b','c'],5]

      c:[1,2,3,4,['a','b','c']]

      d:[1,2,3,4,['a','b']]

      總結

      綜上,我們在使用copy的時候,一定要記住:copy只是拷貝了第一層,而deepcopy才是拷貝的全部數據。

      因此就不難發現,文章背景中的代碼使用備份功能時,備份列表需要使用deepcopy,而不是簡單的copy。

      最后:在我的V :atstudy-js,可以費領取一份10G軟件測試工程師面試寶典文檔資料。以及相對應的視頻學習教程免費分享!其中包括了有基礎知識、Linux必備、Shell、互聯網程序原理、Mysql數據庫、抓包工具專題、接口測試工具、測試進階-Python編程、Web自動化測試、APP自動化測試、接口自動化測試、測試高級持續集成、測試架構開發測試框架、性能測試、安全測試等。


      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      10萬億度需求也不買!中國攤牌,輸電專線全叫停,國產電價教做人

      10萬億度需求也不買!中國攤牌,輸電專線全叫停,國產電價教做人

      阿器談史
      2026-01-26 20:05:32
      比緬北更恐怖!曾經的旅游勝地,如今黃賭毒俱全,性交易隨處可見

      比緬北更恐怖!曾經的旅游勝地,如今黃賭毒俱全,性交易隨處可見

      來科點譜
      2025-10-24 09:25:32
      剛發,大連突發地震,后續地震可能性為……!

      剛發,大連突發地震,后續地震可能性為……!

      本賬號停運
      2026-02-09 19:48:05
      “利潤50%分給員工、不考勤不打卡”,河南男子創業學胖東來,還清105萬外債

      “利潤50%分給員工、不考勤不打卡”,河南男子創業學胖東來,還清105萬外債

      河南交通廣播1041
      2026-02-09 12:45:19
      長沙“互啃”后續:沒實錘,婚離了!中年人的體面,真輸不起!

      長沙“互啃”后續:沒實錘,婚離了!中年人的體面,真輸不起!

      王楔曉
      2026-01-08 11:31:21
      不要小瞧了日本,一旦中日開戰,日本要對中國進行“三路打擊”

      不要小瞧了日本,一旦中日開戰,日本要對中國進行“三路打擊”

      安安說
      2026-01-21 09:50:42
      中央明確!退休新規實施后,公務員及事業編制,不能延遲退休嗎?

      中央明確!退休新規實施后,公務員及事業編制,不能延遲退休嗎?

      南風不及你溫柔
      2026-02-09 23:52:36
      “不給6套房加1個億,不搬”,釘子戶張新國堅守14年,終敗給現實

      “不給6套房加1個億,不搬”,釘子戶張新國堅守14年,終敗給現實

      紅夢史說
      2025-07-11 11:23:39
      魔都天氣現場:春節天氣超前看!假期前半段暖且有雨,大年初二迎冷空氣

      魔都天氣現場:春節天氣超前看!假期前半段暖且有雨,大年初二迎冷空氣

      隨申Hi
      2026-02-09 20:57:03
      高市早苗表態:著手推動修憲

      高市早苗表態:著手推動修憲

      大風新聞
      2026-02-09 20:01:19
      在深圳,經濟一差,到處是詐騙

      在深圳,經濟一差,到處是詐騙

      愛下廚的阿釃
      2026-02-09 20:38:49
      李亞鵬宣布春節前暫停直播:不想占據熒幕叨擾大家,下次開播可能要到很久以后,將投入到嫣然醫院工作中

      李亞鵬宣布春節前暫停直播:不想占據熒幕叨擾大家,下次開播可能要到很久以后,將投入到嫣然醫院工作中

      臺州交通廣播
      2026-02-09 09:22:58
      特斯拉續航剩72公里,高速上突然斷電,售后回應引發爭議

      特斯拉續航剩72公里,高速上突然斷電,售后回應引發爭議

      大象新聞
      2026-02-09 10:01:09
      特朗普炮轟“超級碗”中場秀嘉賓,稱其表演“是對美國的侮辱”

      特朗普炮轟“超級碗”中場秀嘉賓,稱其表演“是對美國的侮辱”

      瀟湘晨報
      2026-02-09 23:17:19
      你見過最窩囊的人是啥樣?網友:原來大家都這么窩囊,我心病好了

      你見過最窩囊的人是啥樣?網友:原來大家都這么窩囊,我心病好了

      帶你感受人間冷暖
      2026-01-06 00:05:11
      巴拿馬急剎車:24小時改口保港口,中方反制有多狠?

      巴拿馬急剎車:24小時改口保港口,中方反制有多狠?

      老謝談史
      2026-02-09 14:53:19
      中國批準稀土出口,日媒歡呼:對華反制措施見效,下一秒遭打臉

      中國批準稀土出口,日媒歡呼:對華反制措施見效,下一秒遭打臉

      壹知眠羊
      2026-02-09 19:55:33
      新春走基層 | 快遞小哥成勞模大哥

      新春走基層 | 快遞小哥成勞模大哥

      人民資訊
      2026-02-08 12:02:27
      90歲焦晃現狀曝出:穿紙尿褲嚴重忘事,與小30歲妻子住無電梯頂層

      90歲焦晃現狀曝出:穿紙尿褲嚴重忘事,與小30歲妻子住無電梯頂層

      小徐講八卦
      2026-02-06 16:10:03
      德國那位軍事專家說得夠直白:美國不是怕中國,是怕打了也白打

      德國那位軍事專家說得夠直白:美國不是怕中國,是怕打了也白打

      扶蘇聊歷史
      2026-01-28 18:04:09
      2026-02-10 03:19:00
      51Testing軟件測試網 incentive-icons
      51Testing軟件測試網
      中國軟件測試人的精神家園
      1522文章數 13252關注度
      往期回顧 全部

      科技要聞

      實測|字節新模型帶著音效和復雜運鏡殺瘋了

      頭條要聞

      人民日報評"南博事件":無論涉及到什么人 絕不放任

      頭條要聞

      人民日報評"南博事件":無論涉及到什么人 絕不放任

      體育要聞

      不會打籃球,如何入選詹娜前男友第一陣容

      娛樂要聞

      央視電影活動名場面!明星站位太講究

      財經要聞

      滬深北交易所優化再融資 釋放3個信號

      汽車要聞

      長安將搭鈉電池 好比汽車要裝柴油機?

      態度原創

      藝術
      健康
      時尚
      親子
      公開課

      藝術要聞

      301.7米!安徽最高、中國最長的樓,外墻寫滿篆書

      轉頭就暈的耳石癥,能開車上班嗎?

      冬季穿衣越簡單越實用!從這些日常穿搭中收獲靈感,大方又自然

      親子要聞

      越討厭跑得越遠

      公開課

      李玫瑾:為什么性格比能力更重要?

      無障礙瀏覽 進入關懷版