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列表深浅复制详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信用卡分期能提前还款吗 手续费一分也不能
- 下一篇: pythonjson实例_python: