Python列表的深复制和浅复制示例详解

  • Post category:Python

Python列表的深复制和浅复制示例详解

在Python中,列表是一种常见的数据类型,它可以包含任意类型的数据,包括数字、字符串、元组、列表、字典等。在中,列表的复制有两种方式:浅复制和深复制。本攻略将详细介绍Python列表的深复制和浅复制,并提供多个示例说明。

浅复制

浅复制是指复制一个列表,创建一个新的列表,但是新列表中的元素是原列表中元素的引用。也就是说,新列表中的元素和原列表中的元素指向同一个内存地址。以下是一个示例代码,演示如何进行浅复制:

# 创建一个列表
my_list = [1, 2, 3, [4, 5, 6]]

# 进行浅复制
new_list = my_list.copy()

# 修改原列表中的元素
my_list[3][0] = 100

# 输出原列表和新列表
print(my_list)  # 输出[1, 2, 3, [100, 5, 6]]
print(new_list)  # 输出[1, 2, 3, [100, 5, 6]]

在上面的示例代码中,我们创建了一个列表my_list,并进行了浅复制,创建了一个新列表new_list。然后,我们修改了原列表中的元素[4, 5, 6]的第一个元素为100。最后,我们输出了原列表和新列表,发现它们的第四个元素都被修改为[100, 5, 6]。这是因为新列表中的元素和原列表中的元素指向同一个内存地址,所以修改原列表中的元素也会影响新列表中的元素。

深复制

深复制是指复制一个列表,创建一个新的列表,新列表中的元素是原列表中元素的副本。也就是说,新列表中的元素和原列表中的元素不是同一个内存地址。以下是一个示例代码,演示如何进行深复制:

# 创建一个列表
my_list = [1, 2, 3, [4, 5, 6]]

# 进行深复制
import copy
new_list = copy.deepcopy(my_list)

# 修改原列表中的元素
my_list[3][0] = 100

# 输出原列表和新列表
print(my_list)  # 输出[1, 2, 3, [100, 5, 6]]
print(new_list)  # 输出[1, 2, 3, [4, 5, 6]]

在上面的示例代码中,我们创建了一个列表my_list,并进行了深复制,创建了一个新列表new_list。然后,我们修改了原列表中的元素[4, 5, 6的第一个元素为100。最后,我们输出了原列表和新列表,发现它们的第四个元素分别为[100, 5, 6][4, 5, 6]。这是因为新列表中的元素和原列表中的元素不是同一个内存地址,所以修改原列表中的元素不会影响新列表中的元素。

示例

以下是另一个示例代码,演示如何在Python中使用浅复制和深复制:

# 创建一个列表
my_list = [1, 2, 3, [4, 5, 6]]

# 进行浅复制
new_list1 = my_list.copy()

# 进行深复制
import copy
new_list2 = copy.deepcopy(my_list)

# 修改原列表中的元素
my_list[3][0] = 100

# 输出原列表和新列表
print(my_list)  # 输出[1, 2, 3, [100, 5, 6]]
print(new_list1)  # 输出[1, 2, 3, [100, 5, 6]]
print(new_list2)  # 输出[1, 2, 3, [4, 5, 6]]

在上面的示例代码中,我们创建了一个列表my_list,并进行了浅复制和深复制,分别创建了新列表new_list1new_list2。然后,我们修改了原列表中的元素[4, 5, 6]的第一个元素为100。最后,我们输出了原列表和新列表,发现浅复制的新列表和原列表中的元素指向同一个内存地址,所以修改原列表中的元素也会影响新列表中的元素;而深复制的新列表和原列表中的元素不是同一个内存地址,所以修改原列表中的元素不会影响新列表中的元素。

总结

在Python中,列表的复制有两种方式:浅复制和深复制。浅复制是指复制一个列表,创建一个新的列表,但是新列表中的元素是原列表中元素的引用;深复制是指复制一个列表,创建一个新的列表,新列表中的元素是原列表中元素的副本。在使用列表时,需要根据实际情况选择浅复制或深复制。