python浅拷贝的说法_Python中List的复制(直接复制、浅拷贝、深拷贝)
直接賦值:
如果用 = 直接賦值,是非拷貝方法。
這兩個(gè)列表是等價(jià)的,修改其中任何一個(gè)列表都會(huì)影響到另一個(gè)列表。
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:
[3, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
-----------------------
'''
淺拷貝:
1.copy()方法
對(duì)于List來說,其第一層,是實(shí)現(xiàn)了深拷貝,但對(duì)于其內(nèi)嵌套的List,仍然是淺拷貝。
因?yàn)榍短椎腖ist保存的是地址,復(fù)制過去的時(shí)候是把地址復(fù)制過去了,嵌套的List在內(nèi)存中指向的還是同一個(gè)。
old = [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.使用列表生成式
使用列表生成式產(chǎn)生新列表也是一個(gè)淺拷貝方法,只對(duì)第一層實(shí)現(xiàn)深拷貝。
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循環(huán)遍歷
通過for循環(huán)遍歷,將元素一個(gè)個(gè)添加到新列表中。這也是一個(gè)淺拷貝方法,只對(duì)第一層實(shí)現(xiàn)深拷貝。
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.使用切片
通過使用 [ : ] 切片,可以淺拷貝整個(gè)列表,同樣的,只對(duì)第一層實(shí)現(xiàn)深拷貝。
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()方法,則無論多少層,無論怎樣的形式,得到的新列表都是和原來無關(guān)的,這是最安全最清爽最有效的方法。
需要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]
-----------------------
'''
總結(jié)
以上是生活随笔為你收集整理的python浅拷贝的说法_Python中List的复制(直接复制、浅拷贝、深拷贝)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 8 update 11_从Ja
- 下一篇: e3是合法浮点数吗_下列哪些是不合法的浮