详解Python列表赋值复制深拷贝及5种浅拷贝

详解Python列表赋值复制深拷贝及5种浅拷贝

在Python中,列表是一种常见的数据类型,它可以存储任意类型的数据。在使用时,我们经常需要对其进行赋值、复和贝等操作。本攻略将详细介绍Python中列表的赋值、复制深拷贝和浅拷贝等操作。

列表赋值

在Python中,列表赋值是将一个列表的引用赋值给另一个变量。这意味着两个变量将引用同一个列表对象。以下是一个示例代码,演示如何进行列表赋值:

# 列表赋值
list1 = [1, 2, 3]
list2 = list1

# 修改list1中的元素
list1[0] =100

# 输出list和list2
print(list1)  # 输出[100, 2, 3]
print(list2)  # 输出[100, 2, 3]

在上面的示例代码中,我们将列表list1的引用赋值给了list2,并修改了1中的元素。由于list1list2引用同一个列表对象,所以修改list1中元素也影响list2中的元素。

列表复制

在Python中,列表复制是将一个列表的所有元素复制到一个新的列表中。这意味着两个列表是独立的,修改一个列表不会影响另一个列表。以下是一个示例代码,演示如何进行列表复制:

# 列表复制
list1 = [1, 2, 3]
list2 = list1.copy()

# 修改list1中的元素
list1[0] = 100

# 输出list1和list2
print(list1)  # 输出[100, 2, 3]
print(list2)  # 输出[1, 2, 3]

在上面的示例代码中,使用copy()方法将list1复制到list2,并修改了list1中的元素。由于list1list2是独立的,所以修改list1中的元素不会影响list2中的元素。

列表浅拷贝

在Python中,列表浅拷贝是将一个列表的所有元素复制到一个新的列表中,但是对于嵌套的列表、元组、字典等对象,只复制其引用而不是对象本身。这意味着修改嵌套对象中的元素会响原始列表和浅拷贝的列表。以下是一个示例代码,演示如何进行列表浅拷贝:

# 列表浅拷贝
list1 = [1, 2, [3, 4]]
list2 = list1.copy()

# 修改list1中的元素
list1[2][0] = 100

# 输出list1和list2
print(list1)  # 输出[1, 2, [100, 4]]
print(list2)  # 输出[1, 2, [100, 4]]

在上面的示例代码中,我们使用()方法将list1浅拷贝到list2,并修改了list1嵌套列表的元素。由于浅拷贝只复制了嵌套列表的引用,所以修改嵌套列表中的元素会影响原始列表和浅拷贝的列表。

列表深拷贝

在Python中,列表深拷贝是将一个列表的所有元素复制到一个新列表中,包括嵌套的列表、元组、字典等对象。这意味着深拷贝的列表是完全独立的,修改一个列表会影响另一个列表。以下是一个示例代码,演示如何进行列表深贝:

# 列表深拷贝
import copy

list1 = [1, 2, [3, 4]]
list2 = copy.deepcopy(list1)

# 修改list1中的元素
list1[2][0] = 100

# 输出list1和list2
print(list1)  # 输出[1, 2, [100, 4]]
print(list2)  # 输出[1, 2, [3, 4]]

在上面的示例代码中,我们使用deepcopy()方法将list1深拷贝到list2,并修改了list1`中嵌套列表的元素。由于深拷贝复制了嵌套列表的对象本身,所以修改嵌套列表中的元素不会影响原始列表和深拷贝的列表。

5种浅拷贝

在Python中,除了使用copy()方法进行浅拷贝外,还有5种方法可以进行浅拷贝。这些方法包括切片、list()构造函数、*运算符、.copy()方法和copy.copy()方法。以下是一个示例代码,演示如何使用这5种方法进行浅拷贝:

# 5种浅拷贝方法
list1 = [1, 2, [3, 4]]

# 切片
list2 = list1[:]
# list()构造函数
list list(list1)
# *运算符
list4 = list1 * 1
# list.copy()方法
list5 = list1.copy()
# copy.copy()方法
import copy
list6 = copy.copy(list1)

# 修改list1中的元素
list1[2][0] = 100

# 输出list1和浅拷贝的列表
print(list1)  # 输出[1, 2, [100, 4]]
print(list2)  # 输出[1, 2, [100, 4]]
print(list3)  # 输出[1, 2, [100, 4]]
print(list4)  # 输出[1, 2, [100, 4]]
print(list5)  # 输出[1, 2,100, 4]]
print(list6)  # 输出[1, 2, [100, 4]]

在上面的示例代码中,我们使用了5种方法进行浅拷贝,并修改了原始列表嵌套列表的元素。由浅拷贝只复制了嵌套列表的引用,所以修改嵌套列表中的元素会影响原始和浅拷贝的列表。

示例

以下是另一个示例代码,演如何在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中,列表的复制有两种方式:浅复制和深复制。浅复制是指复制一个列表,创建一个新的列表,但是新列表中的元素是原列表中元素的引用;深复制是指复制一个列表,创建一个新的列表,新列表中的素是原列表中元素的副本。在使用列表时,需要根据实际情况选择浅复制或深复制。

另外,除了使用copy()方法进行浅拷贝外,还有5种方法可以进行浅拷贝,包括切片、list()构造函数、*运算符、list.copy()方法和copy.copy()方法。需要根据实际情况选择合适的方法进行浅拷贝。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Python列表赋值复制深拷贝及5种浅拷贝 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程

    Python爬虫一键爬取淘宝天猫宝贝页面主图颜色图和详情图的教程 本文将详细讲解如何使用Python爬虫一键爬取淘宝天猫宝贝页面的主图颜色图和详情图。我们将使用Python中的requests、BeautifulSoup和urllib库来实现这个功能。 1. 获取宝贝页面的HTML源代码 首先,我们需要获取宝贝页面的HTML源代码。可以使用requests库…

    python 2023年5月15日
    00
  • 在Python中使用NumPy评估点(x,y,z)的三维拉盖尔数列

    关于在Python中使用NumPy评估三维拉盖尔数列的完整攻略,我整理了以下详细的步骤,希望能对你有所帮助。 准备工作 在使用NumPy计算三维拉盖尔数列之前,需要先安装NumPy模块。你可以使用pip命令来安装,具体指令如下: pip install numpy 代码实现 下面是使用Python和NumPy计算三维拉盖尔数列的详细代码实现: import …

    python-answer 2023年3月25日
    00
  • Python爬虫技术

    Python爬虫技术 Python爬虫技术是通过编写程序,自动从互联网上爬取数据并进行处理分析的技术。Python作为一种功能强大、语法简洁、易于学习的编程语言,被广泛应用于爬虫领域。 爬虫的基本流程 1. 确定爬取的目标和方式 在开始爬虫的过程中,首先需要明确爬虫的目标和方式。需要明确爬取的数据类型、要爬取的网站、爬虫的频次等等。 2. 构造URL和请求 …

    python 2023年5月14日
    00
  • python使用xpath中遇到:到底是什么?

    Python使用XPath中遇到:到底是什么? 在Python中,我们可以使用XPath来解析XML或HTML文档。在使用XPath时,有时会遇到类似于<Element at 0x39a9a80>的输出,这是什么呢?本文将详细介绍这个问题,并提供两个示例。 什么是? 在Python中,<Element at 0x39a9a80>是El…

    python 2023年5月15日
    00
  • Python字符串、整数、和浮点型数相互转换实例

    当我们在使用Python编程时,有时候需要将字符串、整数以及浮点型数相互转换。下面是针对这个问题的完整攻略。 字符串转整数/浮点型 我们可以使用Python自带的int()函数将字符串转换成整数。如果字符串中出现了除数字以外的字符,程序就会报错。例如: num_str = "123" num_int = int(num_str) prin…

    python 2023年6月5日
    00
  • Python学习之线程池与GIL全局锁详解

    Python学习之线程池与GIL全局锁详解 一、前言 Python是一门非常流行的编程语言,被广泛应用于不同领域。在Python中,线程是一种轻量级的执行单元,可以极大提高程序的并发性能。但是,Python中存在一个全局解释器锁(GIL),限制了多线程并发执行的能力。为了提高并发性能,我们可以使用线程池。 本篇文章旨在详细讲解Python中的线程池与GIL全…

    python 2023年5月19日
    00
  • Python 运行 shell 获取输出结果的实例

    想使用 Python 运行 shell 并获取输出结果,可以使用 Python 的 subprocess 模块实现。具体的步骤: 导入 subprocess 模块: import subprocess 使用 subprocess 模块的 run 函数执行命令: result = subprocess.run([‘ls’, ‘-l’], stdout=subp…

    python 2023年6月5日
    00
  • 利用python获取想要搜索的数据

    获取想要搜索的数据是Python中常见的任务之一。Python提供了多种库和工具来实现数据获取,例如requests、BeautifulSoup、Selenium等。本文将详细讲解如何使用Python获取想要搜索的数据的完整攻略,包括使用requests和BeautifulSoup两个示例。 使用requests和BeautifulSoup获取想要搜索的数据…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部