在 Python 中深拷贝列表
Samyak Jain
2023年1月30日
2021年10月2日
我们可以在 Python 中创建浅拷贝和深拷贝。列表的深拷贝是创建一个新列表,然后递归地将原始列表元素的拷贝插入其中。它是指拷贝一个列表,对原始列表所做的任何更改都不会影响拷贝的列表。
在 Python 中使用 copy.deepcopy()
函数深拷贝列表
来自 copy
模块的 deepcopy()
函数用于创建指定列表的深拷贝。如果我们更改此拷贝,则原始列表的内容保持不变,不会更改。
例如,
import copy
A = [[10, 60], [50, 'Hi'], ['Hello', 5, 80]]
B = copy.deepcopy(A)
A[2][0] = 'World'
A[0][1] = 10
print('List A is : % s' % (A))
print('List B is : % s' % (B))
输出:
List A is : [[10, 10], [50, 'Hi'], ['World', 5, 80]]
List B is : [[10, 60], [50, 'Hi'], ['Hello', 5, 80]]
在列表 A
中分配新值后,列表 B
不会被修改,因为列表 B
是列表 A
的深拷贝。列表 A
和列表 B
相互独立。
在 Python 中使用列表推导深拷贝列表
Python 中的列表推导用于从其他可迭代对象(如列表、元组、字符串等)创建新列表。列表推导使代码简单高效。
我们基本上会做 deepcopy()
函数所做的事情,并在此方法中递归地创建给定列表的新拷贝。
例如,
A = [2, 4, 6, 8 , 10]
B = [i for i in A]
A[0] = 'Hi'
print('List A is : % s' % (A))
print('List B is : % s' % (B))
输出:
List A is : ['Hi', 4, 6, 8, 10]
List B is : [2, 4, 6, 8, 10]
我们也可以在没有列表推导的情况下执行此方法,并以传统方式使用 for
循环。然而,它需要更多的代码行和更多的时间。