Python列表的浅拷贝与深拷贝

  • Post category:Python

当我们需要对Python中的列表进行拷贝操作时,可以使用浅拷贝和深拷贝两种方式。本文将详细讲解Python列表的浅拷贝与深拷贝。

浅拷贝

浅拷贝是指创建一个新的列表对象,但是新列表中的元素是原列表中元素的引用。也就是说,新列表中的元素和原列表中的元素指向同一个内存地址。可以使用切片操作或copy函数来进行浅拷贝。下面是一个示例:

# 示例1:浅拷贝
lst1 = [1, 2, [3, 4]]
lst2 = lst1.copy()

lst2[0] = 0
lst2[2][0] = 0

print(lst1)  # [1, 2, [0, 4]]
print(lst2)  # [0, 2, [0, 4]]

在这个示例中,我们首先定义了一个列表lst1,其中包含一个嵌套列表。然后,我们使用copy()函数对lst1进行浅拷贝,得到一个新的列表lst2。接着,我们修改lst2中的元素,包括第一个元素和嵌套列表中的第一个元素。最后,我们打印出lst1和lst2的值,可以到lst1中的元素也被修改了。

深拷贝

深拷贝是指创建一个新的列表对象,同时新列表中的元素也是新的对象,与原列表中的元素没有任何关联。也就是说,新列表中的元素和原列表中的元素指向不同的内存地址。可以使用copy模块中的deepcopy()函数来进行深拷贝。下面是一个示例:

# 示例2:深拷贝
import copy

lst1 = [1, 2, [3, 4]]
lst2 = copy.deepcopy(lst1)

lst2[0] = 0
lst2[2][0] = 0

print(lst1)  # [1, , [3, 4]]
print(lst2)  # [0, 2, [0, 4]]

在这个示例中,我们首先定义了一个列表lst1,其中包含一个嵌套列表。然后,我们使用deepcopy()函数对lst1进行深拷贝,得到一个新的列表lst2。接着,我们修改lst2中的元素,包括一个元素和嵌套列表中的第一个元素。最后,我们打印出lst1和lst2的值,可以看到lst1中的元素没有被修改。

总结

浅拷贝和深拷贝都是Python中常用的列表拷贝方式。浅拷贝创建一个新的列表对象,但是新列表中的元素是原列表中元素的引用;深拷贝创建一个新的列表对象,同时新列表中的元素也是新的对象,与原列表中的元素任何关联。在进行列表拷贝时,需要根据具体情况选择合适的拷贝方式。