Python - 复制列表



在 Python 中复制列表

在 Python 中复制列表是指创建一个新列表,其中包含与原始列表相同的元素。复制列表有多种方法,包括使用切片表示法、list() 函数和使用 copy() 方法。

每种方法在创建浅拷贝还是深拷贝方面表现不同。让我们在本教程中深入探讨所有这些内容。

Python 列表的浅拷贝

Python 中的浅拷贝创建一个新对象,但它不会递归地复制元素,而只复制对原始元素的引用。这意味着新对象与原始对象是独立的实体,但如果元素本身是可变的,则在新对象中对这些元素所做的更改也会影响原始对象。

浅拷贝示例

让我们用以下示例来说明这一点:

import copy
# Original list
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# Creating a shallow copy
shallow_copied_list = copy.copy(original_list)
# Modifying an element in the shallow copied list
shallow_copied_list[0][0] = 100
# Printing both lists
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
original_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# Creating a deep copy
deep_copied_list = copy.deepcopy(original_list)
# Modifying an element in the deep copied list
deep_copied_list[0][0] = 100
# Printing both lists
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
original_list = [1, 2, 3, 4, 5]
# Copying the list using slice notation
copied_list = original_list[1:4]
# Modifying the copied list
copied_list[0] = 100
# Printing both lists
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
original_list = [1, 2, 3, 4, 5]
# Copying the list using the list() constructor
copied_list = list(original_list)
# Printing both lists
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]
# Copying the list using the copy() function
copied_list = copy.copy(original_list)
print("Copied List:", copied_list)

以上代码的输出如下所示:

Copied List: [1, 2, 3, 4, 5]
广告