在 Python 中复制列表是指创建一个包含与原始列表相同元素的新列表。复制列表的方法有很多种,包括使用切片符号、list()
函数和使用 copy()
方法。
每种方法在创建浅拷贝还是深拷贝方面表现不同。让我们在本教程中深入讨论所有这些问题。
Python 列表上的浅拷贝
Python 中的浅拷贝会创建一个新对象,但它不会递归复制元素,而是仅复制对原始元素的引用。这意味着新对象是与原始对象不同的实体,但如果元素本身是可变的,则对新对象中这些元素所做的更改也会影响原始对象。
浅拷贝示例
让我们用以下例子来说明这一点:
import copy
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
shallow_copied_list = copy.copy(original_list)
shallow_copied_list[0][0] = 100
print("Original List:", original_list)
print("Shallow Copied List:", shallow_copied_list)
如您所见,尽管我们仅修改了浅复制列表中第一个子列表的第一个元素,但相同的更改也会反映在原始列表中。
这是因为浅拷贝仅创建对原始对象的新引用,而不是创建对象本身的副本:
Original List: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
Shallow Copied List: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
Python 列表的深度复制
Python 中的深层复制会创建一个全新的对象,并递归复制原始对象引用的所有对象。这意味着,即使原始对象内的嵌套对象也会被复制,从而产生完全独立的副本,对复制对象所做的更改不会影响原始对象,反之亦然。
深层复制示例
让我们用以下例子来说明这一点:
import copy
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
deep_copied_list = copy.deepcopy(original_list)
deep_copied_list[0][0] = 100
print("Original List:", original_list)
print("Deep Copied List:", deep_copied_list)
可以看出,当我们修改深度复制列表中第一个子列表的第一个元素时,它不会影响原始列表。
这是因为深层复制会创建一个新对象并递归复制所有嵌套对象,从而确保复制的对象完全独立于原始对象:
Original List: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Deep Copied List: [[100, 2, 3], [4, 5, 6], [7, 8, 9]]
使用切片符号复制列表
Python 中的切片符号允许您通过指定起始索引、终止索引和可选的步长从序列(如列表、元组或字符串)创建元素的子序列。切片符号的语法如下:
[start:end:step]
其中,start
是切片开始的索引,end
是切片结束的索引(不包括),step
是元素之间的步长。
我们可以使用切片符号复制列表,方法是指定原始列表的整个索引范围。这实际上会创建一个具有与原始列表相同元素的新列表。
对复制列表所做的任何修改都不会影响原始列表,反之亦然,因为它们是内存中单独的对象。
例子
在这个例子中,我们创建了 original_list
的一个片段,有效地将其所有元素复制到新列表 copied_list
中:
original_list = [1, 2, 3, 4, 5]
copied_list = original_list[1:4]
copied_list[0] = 100
print("Original List:", original_list)
print("Copied List:", copied_list)
我们得到如下所示的结果:
Original List: [1, 2, 3, 4, 5]
Copied List: [100, 3, 4]
使用 list()
函数复制列表
Python 中的 list()
函数是一个内置函数,用于创建新的列表对象。它可以接受可迭代对象(如另一个列表、元组、集合等)作为参数,并创建一个包含该可迭代对象的元素的新列表。如果没有提供参数,则创建一个空列表。
我们可以使用 list()
函数复制列表,方法是将原始列表作为参数传递。这将创建一个包含与原始列表相同元素的新列表对象。
例子
在下面的例子中,我们使用 list()
函数创建一个新的列表对象 copied_list
,其中包含与 original_list
相同的元素:
original_list = [1, 2, 3, 4, 5]
copied_list = list(original_list)
print("Original List:", original_list)
print("Copied List:", copied_list)
以下是上述代码的输出:
Original List: [1, 2, 3, 4, 5]
Copied List: [1, 2, 3, 4, 5]
使用 copy()
函数复制列表
在 Python 中,copy()
函数用于创建列表或其他可变对象的浅表副本。此函数是 Python 标准库中 copy
模块的一部分。
我们可以使用 copy()
函数复制列表,方法是在原始列表上调用该函数。这将创建一个包含与原始列表相同元素的新列表对象。
例子
在以下示例中,我们使用 copy()
函数创建一个新的列表对象 copied_list
,其中包含与 original_list
相同的元素:
import copy
original_list = [1, 2, 3, 4, 5]
copied_list = copy.copy(original_list)
print("Copied List:", copied_list)
上述代码的输出如下所示:
Copied List: [1, 2, 3, 4, 5]