在 Python 中复制列表

Azaz Farooq 2023年1月30日
  1. 在 Python 中使用 copy() 方法复制列表
  2. 在 Python 中使用切片方法复制列表
  3. 在 Python 中使用 list() 函数复制列表
  4. 在 Python 中使用列表推导方法复制列表
  5. 在 Python 中使用 copy.copy() 方法复制列表
  6. Python 列表深层复制与浅层复制
在 Python 中复制列表

列表是 Python 中一个灵活的数据类型,用方括号 [] 括起来,用逗号分隔的值。列表中的值可以是不同的数据类型。列表索引从 0 开始,它可以被连接和分片。可以使用不同的内置函数将列表值复制为新的列表值。

本文将介绍在 Python 中复制列表的不同方法。

在 Python 中使用 copy() 方法复制列表

复制 Python 列表最直接的方法是通过 copy() 方法。我们可以找到一个场景,我们要对列表进行复制。等号 = 可以用来构造一个列表的副本。然而,新的列表将与现有的列表相连接。这意味着如果你更新原始列表,新的列表也会被改变。新列表指的是与旧列表相似的项目。

现有列表的副本是由列表 copy() 方法生成的。copy() 方法不接受任何参数。

让我们以水果名称为 Python 列表为例。新的列表将复制前一个列表中存在的所有水果名称。示例代码如下。

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = fruits_spring.copy()
print(fruits_summer)

输出:

['carrots', 'kiwi', 'grapes', 'cherry']

在 Python 中使用切片方法复制列表

在 Python 中,切片是我们用来从列表中提取对象的一种方法。我们可以使用切片方法检索单个对象、几个项目或列表中包含的所有项目。

让我们用上面的例子来说明我们如何使用切片方法复制一个列表。

完整的示例代码如下。

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = fruits_spring[:]
print(fruits_summer)

输出:

['carrots', 'kiwi', 'grapes', 'cherry']

它使用的是克隆形式,即方括号内的冒号([:])。这个过程会生成一个旧列表的副本。

在 Python 中使用 list() 函数复制列表

我们也可以在 Python 中使用 list() 函数来构造一个列表的副本。list() 函数只需要一个参数:你想转换为列表的对象。

让我们用水果摊的例子来演示这种方法。

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = list(fruits_spring)
print(fruits_summer)

输出:

['carrots', 'kiwi', 'grapes', 'cherry']

在 Python 中使用列表推导方法复制列表

这种方法使用列表推导。它通过 for 循环迭代所有现有的列表元素,并添加新的列表元素。

完整的示例代码给出如下。

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]
fruits_summer = [i for i in fruits_spring]
print(fruits_summer)

输出:

['carrots', 'kiwi', 'grapes', 'cherry']

在 Python 中使用 copy.copy() 方法复制列表

我们也可以使用 copy 模块中的 copy() 方法来复制一个 Python 列表。

完整的示例代码给出如下。

import copy

fruits_spring = ["carrots", "kiwi", "grapes", "cherry"]

fruits_summer = copy.copy(fruits_spring)

print(fruits_summer)

输出:

['carrots', 'kiwi', 'grapes', 'cherry']

Python 列表深层复制与浅层复制

以上介绍的方法都是浅层复制。浅层复制的意思是如果列表元素是可变的,而这个元素在原列表中被修改,这个修改也会反映在复制的列表中。浅层复制只复制列表元素的指针或引用。

original_list = [["carrots", "apple"], "kiwi", "grapes", "cherry"]

print("The original list is")
print(original_list)

copied_list = original_list.copy()

original_list[0][0] = "banana"
original_list[0][1] = "apple"
original_list[1] = "orange"

print("The original list after modification is")
print(original_list)
print("The copied list is")
print(copied_list)

输出:

The original list is
[['carrots', 'apple'], 'kiwi', 'grapes', 'cherry']
The original list after modification is
[['banana', 'apple'], 'orange', 'grapes', 'cherry']
The copied list is
[['banana', 'apple'], 'kiwi', 'grapes', 'cherry']

原列表的第一个元素也是一个列表,它是可变的。当我们改变它的内容时,复制列表中相应的元素也会被修改。同时,原列表的第二个元素是一个不可变的对象,所以它的变化不会反映在复制的列表中。

深层复制与浅层复制相反,它将原列表中的对象递归复制到新列表中。所以原列表中的修改不会反映在复制的列表中。copy 模块的 deepcopy() 方法执行深层复制操作。

import copy

original_list = [["carrots", "apple"], "kiwi", "grapes", "cherry"]

print("The original list is")
print(original_list)

copied_list = copy.deepcopy(original_list)

original_list[0] = ["banana", "apple"]
original_list[1] = "orange"

print("The original list after modification is")
print(original_list)
print("The copied list is")
print(copied_list)

输出:

The original list is
[['carrots', 'apple'], 'kiwi', 'grapes', 'cherry']
The original list after modification is
[['banana', 'apple'], 'orange', 'grapes', 'cherry']
The copied list is
[['carrots', 'apple'], 'kiwi', 'grapes', 'cherry']

相关文章 - Python List