Python学习1---深浅拷贝

在Python中,当我们复制对象时,有两种主要的方式:深拷贝(Deep Copy)和浅拷贝(Shallow Copy)。

一、浅拷贝(Shallow Copy)
浅拷贝创建一个新对象,但是它包含的元素是原始对象中元素的引用。

1.1 特点:

  1. 创建一个新对象;
  2. 新对象中的元素是原始对象元素的引用
  3. 只复制对象的第一层

1.2 实现方式:

  1. 使用切片操作 [:]
  2. 使用 copy() 方法
  3. 使用 copy 模块的 copy() 函数

示例:

import copyoriginal = [1, [2, 3], 4]
shallow = copy.copy(original)# 修改浅拷贝中的嵌套列表
shallow[1][0] = 'X'print(original)  # 输出: [1, ['X', 3], 4]
print(shallow)   # 输出: [1, ['X', 3], 4]

在这个例子中,修改浅拷贝中的嵌套列表也会影响原始列表

二、深拷贝(Deep Copy)
深拷贝创建一个新对象,并递归地复制原始对象中的所有嵌套对象。

2.1 特点:

  1. 创建一个全新的对象
  2. 递归地复制所有嵌套的对象
  3. 原始对象和拷贝对象完全独立

2.2 实现方式:
使用 copy 模块的 deepcopy() 函数

示例:

import copyoriginal = [1, [2, 3], 4]
deep = copy.deepcopy(original)# 修改深拷贝中的嵌套列表
deep[1][0] = 'X'print(original)  # 输出: [1, [2, 3], 4]
print(deep)      # 输出: [1, ['X', 3], 4]

在这个例子中,修改深拷贝中的嵌套列表不会影响原始列表。

三、主要区别
1、复制深度:浅拷贝只复制对象的第一层,而深拷贝递归地复制所有层。
2、内存使用:深拷贝通常比浅拷贝使用更多的内存,因为它创建了所有嵌套对象的副本。
3、性能:深拷贝通常比浅拷贝慢,特别是对于大型或复杂的数据结构。
4、独立性:深拷贝创建的对象与原始对象完全独立,而浅拷贝创建的对象与原始对象共享部分数据。

四、使用场景
1、使用浅拷贝:当您只需要复制对象的顶层,而且嵌套对象可以共享时。
2、使用深拷贝:当您需要创建一个完全独立的副本,包括所有嵌套对象时。

五、注意事项
1、对于不可变对象(如元组),浅拷贝和深拷贝的行为是相同的。
2、循环引用可能会导致深拷贝出现问题,deepcopy() 函数有处理这种情况的机制。
3、自定义类可以通过实现 copy() 和 deepcopy() 方法来控制复制行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[1]从概念到实践:电商智能助手在AI Agent技术驱动下的落地实战案例深度剖析(AI Agent技术打造个性化、智能化的用户助手)

电商智能助手进化论:AI Agent技术引领下的智能化升级与实战效果评估 1.LLM Agent 的整体概述 1.0 Agent 在学术界的热度持续攀升 人工智能应用的几个阶段LLM Agent 的构成要素 语言模型 (LLM) 仅限于它们所训练的知识,并且这些知识很快就会过时。且 LLM 具备以下缺点: 会产…

PG大会周五于杭州举办;Pika发布4.0;阿里云MySQL上线Zero-ETL集成能力

重要更新 1. PostgreSQL中国技术大会举行12日(周五)于杭州举办,是PostgreSQL社区年度的大会,举办地点:杭州君尚云郦酒店(杭州市上城区临丁路1188号),感兴趣的可以考虑现场参加 ( [1]…

【公益案例展】华为云X《无尽攀登》——攀登不停,向上而行

‍ 华为云公益案例 本项目案例由华为云投递并参与数据猿与上海大数据联盟联合推出的 #榜样的力量# 《2024中国数据智能产业最具社会责任感企业》榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 夏伯渝,中国无腿登珠峰第一人,一生43年…

Guava LocalCache源码分析:LocalCache生成

Guava LocalCache源码分析:Cache生成 版本LocalCache参数说明Cache构建过程LocalCache介绍LocalCache实例化将builder中的属性赋值到LocalCache中分段 LocalCache为guava本地缓存的解决方案,提供了基于容量,时间和引用的缓存回收方式&#xf…

目标检测大揭秘:算法种类与优劣分析

目标检测大揭秘:算法种类与优劣分析🔍 在当今这个信息爆炸的时代,图像识别技术正逐渐成为我们生活中不可或缺的一部分。目标检测作为图像识别领域的重要分支,已经广泛应用于安全监控、自动驾驶、智能家居等多个领域。今天&#x…

算法复杂度<数据结构 C版>

什么是算法复杂度? 简单来说算法复杂度是用来衡量一个算法的优劣的,一个程序在运行时,对运行时间和运行空间有要求,即时间复杂度和空间复杂度。 目录 什么是算法复杂度? 大O的渐近表达式 时间复杂度示例 空间复杂度…

Python向某个网页发起请求

在Python中,向某个网页发起请求最常用的库是requests。该库简单易用,支持HTTP的GET、POST、PUT、DELETE等方法。以下是如何使用requests库向网页发起请求的例子: 首先,你需要确保安装了requests库。如果你还没有安装,…

Jenkins 离线升级

1. 环境说明 环境 A: jenkins 版本:2.253使用 systemctl 管理的 jenkins 服务 环境 B: 可以上网的机器,装有 docker-compose docker 和 docker-compose 安装,这里都略了。 2. 安装旧版本 2.1 环境 A jenkins 目录打包文件 …

2024辽宁省大学数学建模竞赛试题思路

A题 (1) 建立模型分析低空顺风风切变对起飞和降落的影响 模型假设 飞机被视为质点,忽略其尺寸和形状对风阻的影响。风切变仅考虑顺风方向的变化,忽略其他方向的风切变。飞机的飞行速度、高度和姿态(如迎角、俯仰角)是变化的&am…

(补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式

文章目录 前言一、进制1 逢几进一2 常见进制在java中的表示3 进制中的转换(1)任意进制转十进制(2)十进制转其他进制二、计算机中的存储1 计算机的存储规则(文本数据)(1)ASCII码表(2)编码规则的发展演化2 计算机的存储规则(图片数据)(1)分辨率、像素(2)黑白图与灰度…

服务器操作集合

服务器使用PC作为代理访问外网 1、PC上启动代理,比如nginx 下载nginx:http://nginx.org/en/download.html 修改配置文件,在conf下: http {include mime.types;default_type application/octet-stream;sendfile o…

深入理解二叉树遍历:递归与迭代实现

介绍 在数据结构中,二叉树是一种重要且常见的数据结构,它的遍历方式包括先序、中序和后序三种。本文将通过Java语言,详细讲解如何实现这三种遍历方式的递归和迭代版本。 二叉树定义 首先,我们定义二叉树的节点类 TreeNode&…

罗技K380无线键盘及鼠标:智慧互联,一触即通

目录 1. 背景2. K380无线键盘连接电脑2.1 键盘准备工作2.2 电脑配置键盘的连接 3. 无线鼠标的连接3.1 鼠标准备工作3.2 电脑配置鼠标的连接 1. 背景 有一阵子经常使用 ipad,但是对于我这个习惯于键盘打字的人来说,慢慢在 ipad 上打字,实在是…

面试真题 | ARM体系架构基础知识

ARM体系架构基础知识 什么是ARM架构?它有哪些特点和优势? 参考答案 ARM架构(Advanced RISC Machine)是一种处理器架构,广泛应用于移动设备、嵌入式系统和低功耗应用中。以下是ARM架构的一些特点和优势: 简化指令集:ARM采用精简指令集(RISC, Reduced Instruction Set Co…

cv::Mat 操作多维矩阵的思路

现在有一个 [20(rows) * 20(cols) * 144(channels)]的矩阵&#xff0c;我们想截取一个[20 * 20 * 80]的子矩阵&#xff1a; int dims[3] {20, 20, 144}; cv::Mat mat(cv::Size(dims[1], dims[0]), CV_32FC(dims[2]), (void*)input); const std::vector<cv::Range>&…

conda install问题记录

最近想用代码处理sar数据&#xff0c;解放双手。 看重了isce这个处理平台&#xff0c;在安装包的时候遇到了一些问题。 这一步持续了非常久&#xff0c;然后我就果断ctrlc了 后面再次进行尝试&#xff0c;出现一大串报错&#xff0c;不知道是不是依赖项的问题 后面看到说mam…

模块化(一)nodejs

模块化 一.模块化的基本概念1.1 什么是模块化1.2 模块化规范 二.Node.js 中的模块化2.1 Node.js 中模块的分类2.2 加载模块2.3 Node.js 中的模块作用域2.4 向外共享模块作用域中的成员 一.模块化的基本概念 1.1 什么是模块化 模块化 是指解决一个 复杂问题 时&#xff0c;自顶…

从Centos7升级到Rocky linux 9后,网卡连接显示‘Wired connection 1‘问题解决方法

问题描述 从Centos7升级到Rocky9后, 发现网卡eth0的IP不正确。通过nmcli查看网卡连接&#xff0c;找不到name为eth0的连接&#xff0c;只显示’Wired connection 1’ 查看/etc/NetworkManager/system-connections/&#xff0c;发现找不到网卡配置文件。 原因分析 centos7使…

华为OD机试 - 堆内存申请(Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…

Hadoop-28 ZooKeeper集群 ZNode简介概念和测试 数据结构与监听机制 持久性节点 持久顺序节点 事务ID Watcher机制

章节内容 上节我们完成了&#xff1a; ZooKeeper 集群配置ZooKeeper 集群启动ZooKeeper 集群状况查看Follower 和 Leader 节点 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学习。 之前已经在 VM 虚拟机上搭…