Python 列表复制
生活随笔
收集整理的這篇文章主要介紹了
Python 列表复制
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
關于Python 列表的復制,有多種方法,常用的 有 賦值、切片、list、copy,copy.deepcopy等。
但是 實際用時 又有區別,不小心可能就用錯了。
接下來 簡單舉例 說明一下 使用
import copya = [1,2,3,4] b = a c = a[:] d = a.copy() e = copy.copy(a) f = copy.deepcopy(a) g = list(a) print('id(a):%d,id(b):%d' % (id(a),id(b)))print('id(c):%d' % (id(c))) print('a:%s,b:%s,c%s'%(a,b,c)) a[2] = 5 del a[3] print('a:%s,b:%s,c%s'%(a,b,c)) print('id(d):%d' % (id(d))) print('d:%s' % d) print('id(e):%d' % (id(e))) print('e:%s' % e) print('id(f):%d' % (id(f))) print('f:%s' % f) print('id(g):%d' % (id(g))) print('g:%s' % g)執行 結果如下
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' id(a):4409071368,id(b):4409071368 id(c):4409070344 a:[1, 2, 3, 4],b:[1, 2, 3, 4],c[1, 2, 3, 4] a:[1, 2, 5],b:[1, 2, 5],c[1, 2, 3, 4] # 以上可知 a、b id 一致,改變a 則 b 也會改變 # 一下 id 則都不相同 id(d):4408193736 d:[1, 2, 3, 4] id(e):4409091336 e:[1, 2, 3, 4] id(f):4409091400 f:[1, 2, 3, 4] id(g):4409091080 g:[1, 2, 3, 4]換一種 內嵌列表的列表復制
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' names = ["小明", "小紅", ["張三", "李四", "王五"], "小黑", "小黃", "小白"] # 復制一份列表 names2 = names.copy() # 把李四 改成英文 names[2][1] = "Lisi" print(names) print(names2)# 執行結果 ['小明', '小紅', ['張三', 'Lisi', '王五'], '小黑', '小黃', '小白'] ['小明', '小紅', ['張三', 'Lisi', '王五'], '小黑', '小黃', '小白']這段代碼的運行結果是,兩個列表的李四都變成了英文,來分析一下原理
其實這個圖也挺簡單的,就是中間那個列表是單獨分配了一塊空間,然后從第一層列表中去引用地址,復制的names2 也是引用的地址,所以真實的值一變,兩個列表的內部列表的值也就變了。
也就是說 list.copy() 方法只能 copy 一層,這就是所謂的淺復制。
補充:第二個列表copy 第一個列表,實際上第二個列表的每個元素是第一個列表每個元素的引用
實現淺復制的三種方法
import copynames = ["小明", "小紅", "小黑", "小黃", "小白"] # 淺copy 1. names1 = copy.copy(names) # 2. names2 = names[:] # 3. 工廠函數 names3 = list(names)深復制的方法
''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import copynames = ["小明", "小紅", "小黑", ["粉色"], "小黃", "小白"] # 深復制 deep_names = copy.deepcopy(names) # 修改粉色為 Pink names[3][0] = "Pink" # 分別打印輸出兩個列表 print(names) print(deep_names)# 輸出結果為:['小明', '小紅', '小黑', ['Pink'], '小黃', '小白'] ['小明', '小紅', '小黑', ['粉色'], '小黃', '小白']如下例
a = [[10], 20] b = a[:] c = list(a) d = a * 1 e = copy.copy(a) f = copy.deepcopy(a) a.append(21) a[0].append(11)print (id(a), a) # 4317123656 [[10, 11], 20, 21] print (id(b), b) # 4317123592 [[10, 11], 20] print (id(c), c) # 4317123848 [[10, 11], 20] print (id(d), d) # 4317082888 [[10, 11], 20] print (id(e), e) # 4317123720 [[10, 11], 20] print (id(f), f) # 4317123784 [[10], 20]總結
以上是生活随笔為你收集整理的Python 列表复制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python File(文件) 方法
- 下一篇: python字典的增,删,改,查