日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python列表的淺拷貝與深拷貝_python

作者:#苦行僧 ? 更新時間: 2022-05-07 編程語言

對列表深拷貝就是無論怎樣改動新列表(單維or多維),原列表都不變。

而下面的淺拷貝,對于多維列表,只是第一維深拷貝了(嵌套的List保存的是地址,復制過去的時候是把地址復制過去了),所以說其內層的list元素改變了,原列表也會變。

一、淺拷貝(均是只對第一層進行深拷貝)

1. 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
print(old)
print(new)

'''
[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]
'''

2. 使用copy()函數

old = [1,[1,2,3],3]
new = old.copy()
new[0] = 3
new[1][0] =3
print(old)
print(new)

輸出:

[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]

3. 使用列表生成式

old = [1,[1,2,3],3]
new = [i for i in old]
?
new[0] = 3
new[1][0] = 3
print(old)
print(new)

輸出:

[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
print(old)
print(new)

輸出:

[1, [3, 2, 3], 3]
[3, [3, 2, 3], 3]

淺拷貝對于單層列表就是深拷貝,如:

old = [1,2,3]
new = old[:]
new[0] = 666
print(old)
print(new)
"""
[1, 2, 3]
[666, 2, 3]
"""

二、深拷貝

使用用deepcopy()方法,才是真正的復制了一個全新的和原列表無關的:

import copy
old = [1,[1,2,3],3]
new = copy.deepcopy(old)
?
new[0] = 3
new[1][0] = 3
"""
[1, [1, 2, 3], 3]
[3, [3, 2, 3], 3]
"""

原文鏈接:https://blog.csdn.net/weixin_43646592/article/details/119744273

欄目分類
最近更新