Python中五种列表拷贝的方法

  • Post category:Python

Python中五种列表拷贝的方法

在Python中,列表是一种非常常用的数据类型,用于存储一组有序的元素。在编程中,我们经常需要对列表进行拷贝操作。本文将详细介绍Python中五种列表拷贝的方法,包括浅拷贝和深拷贝,以及方法、示例等。

五种列表拷贝的方法

1. 直接赋值

接赋值是最简单的一种列表拷贝方法,它只是将原列表的引用赋值给新的变量,新变量和原指向同一个内存地址。例如:

# 直接赋值
my_list1 = [1, 2, 3]
my_list2 = my_list1
my_list2[0] = 4
print(my_list1)  # 输出:[4, 2, 3]
print(my_list2)  #:[4, 2, 3]

上述代码中,我们使用直接赋值将my_list1赋值给my_list2,修改my_list2的第一个元素,发现my_list1也被修改了。

2. 浅拷贝

浅拷贝是将原列表的元复制一份到新的列表中,新列表和原列表不再共享内存地址。但是,如果原列表中的元素是可变对象如列表、字典等,则新列表中的元素仍然是原列表中元素的引用。例如:

# 浅拷贝
my_list1 = [1, 2, [3, 4]]
my_list2 = my_list1.copy()
my_list2[2][0] = 5
print(my_list1)  # 输出:[1, 2, [5, 4]]
print(my_list2)  # 输出:[1, 2, [5, 4]]

上述代码中,我们使用copy()方法将my_list1复制到my_list2,修改my_list2中的第三个元素的第一个元素,发现my_list1也被修改了。

3. 切片

切片是一种浅拷贝的方法,它可以复制原列表的一部分到新的列表中。例如:

# 切片
my_list1 = [1, 2, [3, 4]]
my_list2 = my_list1[:]
my_list2[2][0] = 5
print(my_list1)  # 输出:[1, 2, [5, 4]]
print(my_list2)  # 输出:[1, 2, [5, 4]]

上述代码中,我们使用切片将my_list1的所有元素复制到my_list2中,修改my_list2中的第三个元素的第一个元素,发现my_list1也被修改了。

4. list函数

list()函数也是一种浅拷贝的方法,它可以将其他序列类型(如元组、字符串等)转换为列表。例如:

# list()函数
my_tuple = (1, 2, [3, 4])
my_list = list(my_tuple)
my_list[2][0] = 5
print(my_tuple)  # 输出:(1, 2, [5, 4])
print(my_list)  # 输出:[1, 2, [5, 4]]

上述代码中,我们使用list()函数将元组my_tuple转换为列表my_list,修改my_list中的第三个元素的第一个元素,发现my_tuple也被修改。

5. 深拷贝

深拷贝是将原列表及其所有嵌套的可变元素都复制一份到新的列表中,新列表和原列表不再共享内存地址。例如:

# 深拷贝
import copy

my_list1 = [1, 2, [3, 4]]
my_list2 = copy.deepcopy(my_list1)
my_list2[2][0] = 5
print(my_list1)  # 输出:[1, 2, [3, 4]]
print(my_list2)  # 输出:[1, 2, [5, 4]]

上述代码中,我们使用deepcopy()方法将my_list1及其所有嵌套的可变元素复制到my2中,修改my_list2中的第三个元素的第一个元素,发现my_list1没有被修改。

示例

下面是两个例子,演示了如何使用五种列表拷贝的方法。

示例1:使用浅拷贝存储学生信息

下面是一个示例演示了如何使用浅拷贝存储学生信息:

# 使用浅拷贝存储学生信息
import copy

students1 = [{"name": "Tom", "age": 18, "score": [80, 90, 85]},
             {"name": "Jerry", "age": 19, "score": [85, 90, 95]}]
students2 = copy.copy(students1)
students2[0]["score"][0] = 90
print(students1)  # 输出:[{'name': 'Tom', 'age': 18, 'score': [90, 90, 85]}, {'name': 'Jerry', 'age': 19 'score': [85, 90, 95]}]
print(students2)  # 输出:[{'name': 'Tom', 'age': 18, 'score': [90, 90, 85]}, {'name': 'Jerry', 'age': 19, 'score': [85, 90, 95]}]

上述代码中,我们使用浅拷贝将students1复制到students2,修改students2中的第一个学生的第一个成绩,发现students1也被修改了。

示例2:使用深拷贝存储学生信息

下面是另一个例,演示了如何使用深拷贝存学生信息:

# 使用深拷贝存储学生信息
import copy

students1 = [{"name": "Tom", "age": 18, "score": [80, 90, 85]},
             {"name": "Jerry", "age": 19, "score": [85, 90, 95]}]
students2 = copy.deepcopy(students1)
students2[0]["score"][0] = 90
print(students1)  # 输出:[{'name': 'Tom', 'age': 18, 'score': [80, 90, 85]}, {'name': 'Jerry', 'age': 19, 'score': [85, 90, 95]}]
print(students2)  # 输出:[{'name': 'Tom', 'age': 18, 'score': [90, 90, 85]}, {'name': 'Jerry', 'age': 19, 'score': [85, 90, 95]}]

上述代码中,我们使用深拷贝将students1及其所有嵌套的可变元素复制到students2中,修改students2中的第一个学生的第一个成绩,发现students1没有被修改。

总结

本文详介绍了Python中五种列表拷贝的方法,包括浅拷贝和深拷贝,以及方法、示例等。我们演示了如何使用直接赋值、浅拷贝、切片、list()函数和深拷贝等方法拷贝列表,并给出了两个示例。列表是Python编程中非常重要的数据类型,掌握列表的拷贝方法于Python编程非常重要。