Python中的Deepcopy函数详解

一、Deepcopy函数

deepcopy是Python中的一个非常有用的函数,它用于创建一个新的对象,同时将原始对象的所有内容复制到新对象中。与Shallowcopy不同,Deepcopy不仅复制了对象的值,还复制了它所引用的任何其他对象的所有值。

下面是一个简单的例子,使用Deepcopy函数创建一个新的对象。

import copy

a = [1, 2, 3, [4, 5]]
b = copy.deepcopy(a)

print("a:", a)
print("b:", b)

b[3][0] = 0

print("a:", a)
print("b:", b)

输出结果如下:

a: [1, 2, 3, [4, 5]]
b: [1, 2, 3, [4, 5]]
a: [1, 2, 3, [4, 5]]
b: [1, 2, 3, [0, 5]]

可以看到,当我们更新b对象的第4个元素的第一个值时,原始对象a并没有受到影响。这是由于Deepcopy函数创建了一个新的独立对象,而不是只是创建了一个与原始对象共享相同内存的新对象。

二、Deepcopy Python

Deepcopy是Python中的一个标准库函数,因此我们无需安装任何额外的库即可使用它。

Python的deepcopy函数复制对象时是递归的,也就是说,如果对象中包含其他对象,则也会复制它们。这适用于所有可变对象,例如列表、字典等。

虽然Deepcopy可以处理任何类型的对象,但对于不可变对象(例如:数字、字符串等),它不会进行复制操作,而是直接返回对原始对象的引用。以下是一个例子:

import copy

a = 1
b = copy.deepcopy(a)

print("a:", a)
print("b:", b)

b = 2

print("a:", a)
print("b:", b)

输出结果如下:

a: 1
b: 1
a: 1
b: 2

可以看到,当我们更新b对象的值时,原始对象a并没有受到影响。这是由于Deepcopy函数在处理不可变对象时并不会进行递归复制,而是直接返回原始对象的引用。

三、Deepcopy用法

在Python中,有许多情况下我们需要复制一个对象,而不是只是创建它的引用。这时便可以使用Deepcopy函数。以下是一些使用Deepcopy函数的常见用法:

1.复制列表

import copy

a = [1, 2, 3, [4, 5]]
b = copy.deepcopy(a)

print("a:", a)
print("b:", b)

b[3][0] = 0

print("a:", a)
print("b:", b)

输出结果如下:

a: [1, 2, 3, [4, 5]]
b: [1, 2, 3, [4, 5]]
a: [1, 2, 3, [4, 5]]
b: [1, 2, 3, [0, 5]]

2.复制字典

import copy

a = {"name": "Alice", "age": 20, "address": {"city": "Beijing", "district": "Haidian"}}
b = copy.deepcopy(a)

print("a:", a)
print("b:", b)

b["address"]["district"] = "Xicheng"

print("a:", a)
print("b:", b)

输出结果如下:

a: {'name': 'Alice', 'age': 20, 'address': {'city': 'Beijing', 'district': 'Haidian'}}
b: {'name': 'Alice', 'age': 20, 'address': {'city': 'Beijing', 'district': 'Haidian'}}
a: {'name': 'Alice', 'age': 20, 'address': {'city': 'Beijing', 'district': 'Haidian'}}
b: {'name': 'Alice', 'age': 20, 'address': {'city': 'Beijing', 'district': 'Xicheng'}}

3.复制自定义对象

import copy

class MyClass:
    def __init__(self, a):
        self.a = a

a = MyClass(1)

b = copy.deepcopy(a)

print("a:", a.a)
print("b:", b.a)

b.a = 2

print("a:", a.a)
print("b:", b.a)

输出结果如下:

a: 1
b: 1
a: 1
b: 2

可以看到,同样适用于自定义对象,Deepcopy函数也可以正常工作。

四、Deepcopy怎么读

Deepcopy的读音为[dipkɒpi]。

五、Deepcopy什么意思

Deepcopy的意思是深拷贝。它是一种将对象复制到新对象中的方法。与Shallowcopy不同,Deepcopy不仅复制对象的值,还复制了它所引用的任何其他对象的所有值。

六、Deepcopy和Copy区别

Copy和Deepcopy都可以用来复制对象,它们之间的主要区别在于复制的方式。Copy执行的是一次浅复制,对象只被复制一次,但包含在对象中的其他对象仅复制了引用(也称为“子元素”)。与此不同,Deepcopy执行的是一次深复制,对象及其包含的任何对象都被复制。这意味着前者的复制值能受其他调用修改,而后者则不会。

以下是一个具体的例子:

import copy

a = [1, 2, [3, 4]]
b = copy.copy(a)
c = copy.deepcopy(a)

a.append(5)
a[2][0] = 6

print("a:", a)
print("b:", b)
print("c:", c)

输出结果如下:

a: [1, 2, [6, 4], 5]
b: [1, 2, [6, 4]]
c: [1, 2, [3, 4]]

可以看到,当我们尝试更新原始对象a的第三个元素的第一个值时,Copy函数创建的对象b也受到了影响,而Deepcopy函数创建的对象c并没有受到影响。

七、总结

Deepcopy是Python中的一个非常有用的函数,它用于创建一个新的对象,同时将原始对象的所有内容复制到新对象中。与Shallowcopy不同,Deepcopy不仅复制了对象的值,还复制了它所引用的任何其他对象的所有值。深拷贝适用于任何可变对象,包括列表、字典、自定义对象。与Copy函数相比,Deepcopy执行的是一次深复制,因此它创建了一个新的独立对象而不是只是复制了一个与原始对象共享相同内存的新对象。

原创文章,作者:PSXE,如若转载,请注明出处:https://www.506064.com/n/143849.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PSXE的头像PSXE
上一篇 2024-10-24 15:26
下一篇 2024-10-24 15:26

相关推荐

  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29

发表回复

登录后才能评论