Python 中的浅拷贝和深拷贝解释_深拷贝和浅拷贝的区别python

liftword2个月前 (03-01)技术文章21

如果 认为,赋值操作=创建一个新对象;但在 Python 中则不然。它仅创建一个共享原始对象引用的新变量。在编程时,有时需要对象的副本,以便可以在不修改原始对象的情况下进行修改。为了做到这一点,我们创建对象的副本。

在Python中,有两种创建副本的方法:

.浅拷贝: 浅拷贝意味着构造一个新对象,然后用对原始对象中的子对象的引用填充它。

深拷贝:深层复制构造一个新对象,然后递归地将在原始对象中找到的对象的副本插入其中。

本质上,浅拷贝是一层深。复制过程不会递归,因此不会创建子对象本身的副本。而深度复制则遍历整个对象树,以创建原始对象及其所有子对象的完全独立的克隆。

创建浅拷贝

让创建一个嵌套列表,然后使用list()函数。

>>> org = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> cpy = list(org)    # Make a shallow copy

现在,拷贝数是一个独立的对象,其内容与组织。为了确认这一点,我们添加一个新的子列表拷贝数并检查以确保此修改未反映在组织。

>>> cpy.append(['new element'])
>>> cpy
[[1, 2, 3], [4, 5, 6], [7, 8, 9], ['new element']]>>> org
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

正如所料,在“表面”层面修改复制的列表完全没有问题。 然而,由于我们只创建了一个浅表副本组织,复制列表拷贝数仍然包含对原始子对象的引用。子列表不会被复制。它们只是在复制的列表中再次引用。

如果修改其中一个子对象拷贝数,变化将反映在组织以及。

>>> cpy[1][0] = 'Sarah'
>>> cpy
[[1, 2, 3], ['Sarah', 5, 6], [7, 8, 9], ['new element']]>>> org
[[1, 2, 3], ['Sarah', 5, 6], [7, 8, 9]]

同样,发生这种情况是因为我们只创建了原始列表的浅表副本,因此两个列表对象共享相同的子对象。

如果创建了一个深层副本,这两个对象将完全独立。这就是浅拷贝和深拷贝的区别。那

创建深层副本

让重复前面的列表复制示例,这次我们将使用深拷贝()复制模块中定义的函数。

>>> import copy
>>> org = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> cpy = copy.deepcopy(org)

经检查,两个列表对象将再次看起来相同 - 就像前面的示例一样。

>>> org
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> cpy
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

但是,对其中一个子对象的修改拷贝数,不会反映在原始列表中组织。

>>> cpy[1][0] = 'Sarah'
>>> cpy
[[1, 2, 3], ['Sarah', 5, 6], [7, 8, 9]]>>> org
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

由于这次两个对象是完全独立的,因此没有变化组织列表对象。
另外,我们还可以使用复制模块中的函数创建浅复制。这复制.copy()创建浅拷贝。
要理解任何概念,最好的方法是使用 Python 解释器中的示例,因此最好花一些时间开始复制对象并直接使用示例。

结论:

  • 制作对象的浅表副本不会克隆子对象。因此它不会完全独立于原始版本。
  • 对象的深层复制将递归地克隆子对象。克隆完全独立于原始副本,但创建深层副本速度较慢。

相关文章

用Python复制文件的9个方法_python怎么复制文件到另一个地方

Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在这篇文章中,你将会看到一些用 Python 实现文件复制的特殊方法。下面我们开...

python每日一练之如何copy_python中copy用法

概述今天主要来看看Python中的浅拷贝和深拷贝内容,这里用一个实例来说明~需求:将一个列表的数据复制到另一个列表中。思路:使用列表[:],拿不准可以调用copy模块。实现方法:#!/usr/bin/...

Python复制文件的9种办法 :一文全。

Python复制文件 11 分钟阅读将文件从一个目录复制到另一个目录是一项常见的任务。Python 有许多模块(如 os、subprocess 和 sh-util)来支持文件复制。从这篇文章中,可以获...

文件备份用Python,照着复制粘贴代码就可以了

引言在日常开发和运维工作中,数据安全尤为重要,定期备份重要文件是防范数据丢失的有效手段之一。本文将详细介绍如何使用Python实现一个简单的定时备份脚本,该脚本可以按照设定周期自动将指定文件夹或文件复...

Python浅拷贝深拷贝之copy、deepcopy

笔记记录20221205:个人总结:1,两者基本区别不大;2,在涉及到子对象时候,两者才有区别;3,在涉及到子对象,且子对象的操作后内存地址没有发生变化(如下方代码:dic1['one'].appen...

Python之掌握文件删除、复制、重命名及内容查找的技巧

亲爱的读者们,今天我们将为大家详细介绍Python中文件操作的四大技巧:文件删除、文件复制、文件重命名以及文件内容查找。掌握这些技巧,将有助于你在编程过程中更加高效地处理文件。一、文件的删除在Pyth...