欢迎访问宙启技术站
智能推送

Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解

发布时间:2023-05-16 04:16:19

Python列表是一种有序的序列,用于存储一组数据。在Python中,列表是可变的,允许我们在其中添加,删除和修改元素。在使用列表时,我们经常需要对其进行赋值和复制的操作,本文将详细介绍Python列表的赋值,复制,深拷贝和浅拷贝操作。

1. Python列表赋值

在Python中,列表赋值和其他变量赋值是一样的。

# 列表赋值
a = [1, 2, 3]
b = a
print(b)  # [1, 2, 3]

当我们将一个列表赋值给另一个变量时,它们会指向同一个列表对象。这意味着如果我们修改其中一个变量,另一个变量也会受到影响。

# 修改赋值变量a的元素
a[0] = 0
print(b)  # [0, 2, 3]

上面的例子中,我们将a修改为[0, 2, 3],因此b也会变成[0, 2, 3]

2. Python列表复制

当我们需要将一个列表的所有元素复制到另一个列表中时,我们可以使用copy()方法或者切片操作。这将生成一个新的列表对象,而不是与原始列表共享同一对象。

# 使用copy()方法复制列表
a = [1, 2, 3]
b = a.copy()
print(b)  # [1, 2, 3]

# 使用切片操作复制列表
c = a[:]
print(c)  # [1, 2, 3]

当我们将一个列表赋值给另一个变量时,它们将指向同一个列表对象。但是,使用copy()方法或者切片操作时,将生成一个新的列表对象,我们可以单独对其进行修改,而不会影响原始列表。

# 修改复制变量b的元素
b[0] = 0
print(a)  # [1, 2, 3]
print(b)  # [0, 2, 3]

3. Python列表深拷贝

在Python中,可以使用copy模块中的deepcopy()方法对嵌套的列表进行完全独立的拷贝,称为深拷贝。

import copy

# 列表嵌套
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
print(b)  # [1, 2, [3, 4]]

# 修改深拷贝变量b的元素
b[2][0] = 0
print(a)  # [1, 2, [3, 4]]
print(b)  # [1, 2, [0, 4]]

在上面的例子中,我们将a赋值给b的时候使用了深拷贝。这意味着我们有一个全新的嵌套列表,对于原始数据的修改不会影响到b。

4. Python列表浅拷贝

在Python中,浅拷贝意味着创建了一个新的列表对象,但是该对象中的元素仍然与原始列表共享同一对象。可以使用copy模块中的copy()方法或者切片操作实现浅拷贝。

# 列表嵌套
a = [1, 2, [3, 4]]
b = copy.copy(a)
c = a[:]
print(b)  # [1, 2, [3, 4]]
print(c)  # [1, 2, [3, 4]]

# 修改浅拷贝变量b和c的元素
b[2][0] = 0
c[2][0] = 1
print(a)  # [1, 2, [0, 4]]
print(b)  # [1, 2, [0, 4]]
print(c)  # [1, 2, [1, 4]]

在上面的例子中,我们使用copy()方法和切片操作分别生成了浅拷贝变量b和c。我们可以看到,修改浅拷贝变量的元素时,原始列表a会受到影响,而其他变量不会受到影响。这是因为浅拷贝变量仍然与原始列表共享同一对象。

5. Python列表浅拷贝的4种方式

除了上面介绍的copy()方法和切片操作,还可以使用其他几种方式实现浅拷贝。

(1)使用列表(list)工厂函数

# 使用列表(list)工厂函数浅拷贝列表
a = [1, 2, 3]
b = list(a)
print(b)  # [1, 2, 3]

(2)使用列表解析

# 使用列表解析浅拷贝列表
a = [1, 2, 3]
b = [i for i in a]
print(b)  # [1, 2, 3]

(3)使用切片复制

# 使用切片复制浅拷贝列表
a = [1, 2, 3]
b = a[:]
print(b)  # [1, 2, 3]

(4)使用copy()方法

# 使用copy()方法浅拷贝列表
a = [1, 2, 3]
b = a.copy()
print(b)  # [1, 2, 3]

综上所述,本文详细介绍了Python列表的赋值、复制、深拷贝和浅拷贝的操作,并且介绍了浅拷贝的4种方式。在使用列表时,需要根据实际场景选择适合的方法,以充分发挥其优势并避免不必要的错误。