Python中List的复制(直接复制、浅拷贝、深拷贝)
生活随笔
收集整理的這篇文章主要介紹了
Python中List的复制(直接复制、浅拷贝、深拷贝)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
復制方法匯總:
| 直接賦值 | = | 復制的是list的地址,這兩個列表是完全等價的,修改其中任何一個列表都會影響到另一個列表。 | old = [1,[1,2,3],3] new = old |
| 淺拷貝 | copy.copy()方法 | 對于List來說,第一層,是實現了深拷貝,但其內嵌套的List,仍然是淺拷貝。 因為嵌套的List保存的是地址,復制過去的時候是把地址復制過去了,嵌套的List在內存中指向的還是同一個。 | import copy old = [1,[1,2,3],3] |
| 使用列表生成式 | old = [1,[1,2,3],3] new = [i for i in old] | ||
| 使用for循環 | old = [1,[1,2,3],3] new = [] for i in range(len(old)): ? ? new.append(old[i]) | ||
| 使用切片 | old = [1,[1,2,3],3] new = old[:] | ||
| 深拷貝 | 使用copy.deepcopy() | 無論list內嵌多少層,無論怎樣的形式,得到的新列表都是和原來無關的,這是最安全最清爽最有效的方法。 | import copy old = [1,[1,2,3],3] new = copy.deepcopy(old) |
直接賦值:
如果用?= 直接賦值,是非拷貝方法。
這兩個列表是等價的,修改其中任何一個列表都會影響到另一個列表。
old = [1,[1,2,3],3] new = oldnew[0] = 3 new[1][0] = 3''' ----------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [3, [3, 2, 3], 3] [3, [3, 2, 3], 3] ----------------------- '''淺拷貝:
1.copy()方法
對于List來說,其第一層,是實現了深拷貝,但對于其內嵌套的List,仍然是淺拷貝。
因為嵌套的List保存的是地址,復制過去的時候是把地址復制過去了,嵌套的List在內存中指向的還是同一個。
import copyold = [1,[1,2,3],3] new = old.copy()new[0] = 3 new[1][0] =3''' --------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] --------------------- '''2.使用列表生成式
使用列表生成式產生新列表也是一個淺拷貝方法,只對第一層實現深拷貝。
old = [1,[1,2,3],3] new = [i for i in old]new[0] = 3 new[1][0] = 3''' ---------------------- Before [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] ---------------------- '''3.for循環遍歷
通過for循環遍歷,將元素一個個添加到新列表中。這也是一個淺拷貝方法,只對第一層實現深拷貝。
old = [1,[1,2,3],3] new = [] for i in range(len(old)):new.append(old[i])new[0] = 3 new[1][0] = 3''' ----------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] ----------------------- '''4.使用切片
通過使用 [ : ] 切片,可以淺拷貝整個列表,同樣的,只對第一層實現深拷貝。
old = [1,[1,2,3],3] new = old[:]new[0] = 3 new[1][0] = 3''' ------------------ Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [3, 2, 3], 3] [3, [3, 2, 3], 3] ------------------ '''深拷貝:
如果用deepcopy()方法,則無論多少層,無論怎樣的形式,得到的新列表都是和原來無關的,這是最安全最清爽最有效的方法。
需要import copy
import copy old = [1,[1,2,3],3] new = copy.deepcopy(old)new[0] = 3 new[1][0] = 3''' ----------------------- Before: [1, [1, 2, 3], 3] [1, [1, 2, 3], 3] After: [1, [1, 2, 3], 3] [3, [3, 2, 3], 3] ----------------------- '''?
總結
以上是生活随笔為你收集整理的Python中List的复制(直接复制、浅拷贝、深拷贝)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring AOP(一):概览
- 下一篇: Python-按照list中dict的某