337p人体粉嫩胞高清图片,97人妻精品一区二区三区在线 ,日本少妇自慰免费完整版,99精品国产福久久久久久,久久精品国产亚洲av热一区,国产aaaaaa一级毛片,国产99久久九九精品无码,久久精品国产亚洲AV成人公司
網易首頁 > 網易號 > 正文 申請入駐

問題解析: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.

相關推薦
熱點推薦
伊朗稱摧毀兩枚AGM-158巡航導彈

伊朗稱摧毀兩枚AGM-158巡航導彈

國際在線
2026-03-25 06:38:24
張雪峰去世,他留下的10條志愿鐵律,2026高考、考研依然封神

張雪峰去世,他留下的10條志愿鐵律,2026高考、考研依然封神

寒律
2026-03-25 09:53:30
美以軍事打擊已致伊朗243名師生喪生

美以軍事打擊已致伊朗243名師生喪生

新華社
2026-03-25 14:41:06
電商平臺速效救心丸搜索量同比增30倍,品牌方工作人員:的確有增長,價格不會因張雪峰事件上漲

電商平臺速效救心丸搜索量同比增30倍,品牌方工作人員:的確有增長,價格不會因張雪峰事件上漲

極目新聞
2026-03-25 10:57:19
三萬科普:張雪峰走了,但不是跑步的鍋

三萬科普:張雪峰走了,但不是跑步的鍋

傅盛
2026-03-25 02:48:03
脂肪瘤——父親鉆研一生的方子,我用了40年,效果出眾,送給有緣人

脂肪瘤——父親鉆研一生的方子,我用了40年,效果出眾,送給有緣人

神奇故事
2026-03-23 23:51:03
委內瑞拉外交使團將于本周赴美履職

委內瑞拉外交使團將于本周赴美履職

新京報
2026-03-25 12:57:40
41歲張雪峰去世,成名10年爭議不斷,遺產曝光早已做好一切安排!

41歲張雪峰去世,成名10年爭議不斷,遺產曝光早已做好一切安排!

古希臘掌管松餅的神
2026-03-24 22:00:07
中遠海能回應是否通過霍爾木茲海峽

中遠海能回應是否通過霍爾木茲海峽

第一財經資訊
2026-03-25 11:49:33
一場涉及近68萬億的債務脫鉤行動,已經進入最后15個月的倒計時

一場涉及近68萬億的債務脫鉤行動,已經進入最后15個月的倒計時

流蘇晚晴
2026-03-24 19:20:03
伊朗被曝拒絕與威特科夫和庫什納談判

伊朗被曝拒絕與威特科夫和庫什納談判

新華社
2026-03-25 11:08:02
伊朗喊話美國:別把失敗稱為協議!被曝拒絕與特朗普女婿等談判,傾向與萬斯談判!美調派第82空降師2000人前往中東

伊朗喊話美國:別把失敗稱為協議!被曝拒絕與特朗普女婿等談判,傾向與萬斯談判!美調派第82空降師2000人前往中東

每日經濟新聞
2026-03-25 13:15:12
釋永信“開光”真相大白,過程不堪入目,易中天也有牽扯

釋永信“開光”真相大白,過程不堪入目,易中天也有牽扯

秋姐居
2026-03-25 10:22:58
張雪峰去世真相!網友:偌大的公司靠他個人ip養活,早死是必然的

張雪峰去世真相!網友:偌大的公司靠他個人ip養活,早死是必然的

火山詩話
2026-03-25 09:18:58
繼母燙幼子下體逼吃大便 姐弟慘遭虐待生母怒討說法

繼母燙幼子下體逼吃大便 姐弟慘遭虐待生母怒討說法

大象新聞
2026-03-25 12:09:04
米切爾42分騎士擊敗魔術4連勝,哈登26分7助班凱羅36分6板5助

米切爾42分騎士擊敗魔術4連勝,哈登26分7助班凱羅36分6板5助

湖人崛起
2026-03-25 10:43:28
曝小哈梅內伊已同意與美國進行和平談判,只需滿足伊朗提出的條件

曝小哈梅內伊已同意與美國進行和平談判,只需滿足伊朗提出的條件

爆角追蹤
2026-03-24 15:39:49
從副總經理、總經理到董事長,江蘇一水務集團三個高管相繼被查

從副總經理、總經理到董事長,江蘇一水務集團三個高管相繼被查

俯瞰江蘇
2026-03-25 13:06:37
歐洲是如何悄然介入美伊戰爭的

歐洲是如何悄然介入美伊戰爭的

澎湃新聞
2026-03-24 20:54:04
張雪峰曾發文宣布自己離婚,獨生女兒張姩菡,可以繼承2個億遺產

張雪峰曾發文宣布自己離婚,獨生女兒張姩菡,可以繼承2個億遺產

畫夕
2026-03-25 10:54:43
2026-03-25 14:48:49
51Testing軟件測試網 incentive-icons
51Testing軟件測試網
中國軟件測試人的精神家園
1543文章數 13257關注度
往期回顧 全部

科技要聞

紅極一時卻草草收場,Sora宣布正式關停

頭條要聞

特朗普:希望通過外交方式停戰 以"挽救百萬人生命"

頭條要聞

特朗普:希望通過外交方式停戰 以"挽救百萬人生命"

體育要聞

NBA最強左手射手,是個右撇子

娛樂要聞

張雪峰經搶救無效不幸去世 年僅41歲

財經要聞

管濤:中東局勢如何影響人民幣匯率走勢?

汽車要聞

智己LS8放大招 30萬內8系旗艦+全線控底盤秀實力

態度原創

時尚
健康
本地
數碼
家居

當年輕女性,闖入電競圈

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

本地新聞

來永泰同安 赴一場春天的約會

數碼要聞

權宜之計:Geekbench提示支持IBOT的英特爾處理器跑分可能無效

家居要聞

輕奢堇天府 小資情調

無障礙瀏覽 進入關懷版