在 Python 中复制列表
-
在 Python 中使用
copy()
方法复制列表 - 在 Python 中使用切片方法复制列表
-
在 Python 中使用
list()
函数复制列表 - 在 Python 中使用列表推导方法复制列表
-
在 Python 中使用
copy.copy()
方法复制列表 - 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']