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, , 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_list1
和new_list2
。然后,我们修改了原列表中的元素[4, 5, 6]
的第一个元素为100
。最后,我们输出了原列表和新列表,发现浅复制的新列表和原列表中的元素指向同一个内存地址,所以修改原列表中的元素也会影响新列表中的元素;而深复制的新列表和原列表中的元素不是同一个内存地址,所以修改原列表中的元素不会影响新列表中的元素。
总结
在Python中,列表的复制有两种方式:浅复制和深复制。浅复制是指复制一个列表,创建一个新的列表,但是新列表的元素是原列表中元素的引用;深复制是指复制一个列表,创建一个新的列表,新列表中的元素是原列表中元素的副本。在使用列表时,需要根据实际情况选择浅复制或深复制。
另外,需要注意的是,除了使用copy()
方法进行浅复制外,还有其他几种方法可以进行浅复制,包括切片、list()
构造函数、*
运算符、list.copy()
方法和copy.copy()
方法。这些方法都是复制一个列表,创建一个新的列表,但是新列表中的元素是原中元素的引用。因此,使用这些方法进行浅复制时,需要注意修改原列表中的元素也会影响新列表中的元素。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python列表的深复制和浅复制示例详解 - Python技术站