日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python列表浅复制_Python列表深浅复制详解

發布時間:2023/12/10 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python列表浅复制_Python列表深浅复制详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:https://www.cnblogs.com/blaomao/p/7239203.html

在文章《Python 數據類型》里邊介紹了列表的用法,其中列表有個 copy() 方法,意思是復制一個相同的列表。例如

1 names = ["小明", "小紅", "小黑", "小黃", "小白"] 2 #把 names 復制,賦值給 names2 變量 3 names2 =names.copy() 4 #分別輸出 names names2 5 print(names) 6 print(names2)

這時會發現結果是一樣的,那么問題來了,我要把 names 列表中的 小黃改成英文 Yellow,那么 names2 的小黃會發生變化嗎?寫一段代碼看看

1 names = ["小明", "小紅", "小黑", "小黃", "小白"] 2 #把 names 復制,賦值給 names 變量 3 names2 =names.copy() 4 #修改 names 列表中的 小黃 5 names[3] = "Yellow" 6 #分別輸出 names names2 7 print(names) 8 print(names2)

看結果會發現,只是把names 列表中的 小黃 改成了 Yellow ,names2 列表中沒有變,其實它的原理很簡單,如下圖

首先,names 指向一個列表,然后把 names 復制了一份,賦值給 names2 ,由于 修改的是 第一個 列表的 小黃,所以第二個列表不受影響。

那么現在我改一下這個列表,從names列表中再添加一個列表,如下代碼

1 names = ["小明", "小紅", ["張三", "李四", "王五"], "小黑", "小黃", "小白"] 2 #復制一份列表 3 names2 =names.copy() 4 #把李四 改成英文 5 names[2][1] = "Lisi" 6 print(names) 7 print(names2)

這段代碼的運行結果是,兩個列表的李四都變成了英文,來分析一下原理

其實這個圖也挺簡單的,就是中間那個列表是單獨分配了一塊空間,然后從第一層列表中去引用地址,復制的names2 也是引用的地址,所以真實的值一變,兩個列表的內部列表的值也就變了。

也就是說 list.copy() 方法只能 copy 一層,這就是所謂的淺復制。

補充:第二個列表copy 第一個列表,實際上第二個列表的每個元素是第一個列表每個元素的引用

實現淺復制的三種方法

1 importcopy

2

3 names = ["小明", "小紅", "小黑", "小黃", "小白"] 4 #淺copy 1. 5 names1 =copy.copy(names) 6 #2. 7 names2 =names[:] 8 #3. 工廠函數 9 names3 = list(names)

深復制的方法

1 importcopy

2

3 names = ["小明", "小紅", "小黑", ["粉色"], "小黃", "小白"] 4 #深復制 5 deep_names =copy.deepcopy(names) 6 #修改粉色為 Pink 7 names[3][0] = "Pink" 8 #分別打印輸出兩個列表 9 print(names) 10 print(deep_names)

輸出結果為:

['小明', '小紅', '小黑', ['Pink'], '小黃', '小白'] ['小明', '小紅', '小黑', ['粉色'], '小黃', '小白']

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的python列表浅复制_Python列表深浅复制详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。