在 Python 中深拷贝列表

Samyak Jain 2023年1月30日
  1. 在 Python 中使用 copy.deepcopy() 函数深拷贝列表
  2. 在 Python 中使用列表推导深拷贝列表
在 Python 中深拷贝列表

我们可以在 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 循环。然而,它需要更多的代码行和更多的时间。

相关文章 - Python List