[Python]之深拷贝与浅拷贝

news2024/9/21 0:46:49

Python之深拷贝与浅拷贝

概述:

​ 大白话解释就是 深拷贝拷贝的多, 浅拷贝拷贝的少.

  1. 深浅拷贝区别就是: 拷贝的层级的多与少.

  2. 深浅拷贝都能操作可变类型 和 不可变类型, 但是深浅拷贝一般操作的都是 可变类型, 几乎不会出操作不可变类型的.

  3. 可变类型 和 不可变类型的划分依据: 在不改变地址值的情况下, 元素值是否可以发生改变,

    可以: 可变类型, 不可以: 不可变类型.
    ​ 可变类型: 列表, 字典, 集合
    ​ 不可变类型: 整型, 浮点型, 字符串, 布尔型, 元组

  4. 深浅拷贝指的是 copy模块下的不同的函数.
    ​ 浅拷贝: copy.copy()
    ​ 深拷贝: copy.deepcopy()

因为深浅拷贝主要针对的是可变类型,不可变类型拷贝还是同一个地址,所以下面通过一个简单的方式讲明白深浅拷贝的区别
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9, a, b]
d = c
print(id(c))
print(id(d))

​ 当上面的代码执行后,我们发现c和d的地址是一样的,因为在python中 = 传递的是地址值,又因为python中list为可变类型,更改值并不会变更地址,所以,更改c的值的时候d的值也会被更改,那么如果我们想更改c而不更改d的时候怎么办呢?

这个时候就需要浅拷贝了
import copy

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9, a, b]
d = copy.copy(c)
print(id(c))
print(id(d))

​ 此时我们发现,d和c的地址值不一样了,浅拷贝将一个新的地址值给了d并将c的内容加进去了

​ 这个时候我们修改c,d里面除了a,b列表以外的值都不会有关联,但是,因为是浅拷贝,c d 里面复制的是ab的地址,这个时候修改c或d里面a,b的值,都会影响到另一个,可能会看不懂,这里代码试一下就明白了:

import copy

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9, a, b]
d = copy.copy(c)
print(id(c))
print(id(d))
print(c)
print(d)
print('-'* 30)
c[2] = 10
print(c)
print(d)
print('-'* 30)
c[3][0] = 5201314
print(c)
print(d)

运行结果如下:

在这里插入图片描述

这时聪明的小伙伴就理解了,深拷贝是将拷贝对象内部的地址内的内容也拷贝到新的地址

import copy

a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9, a, b]
d = copy.deepcopy(c)
print(id(c))
print(id(d))
print(c)
print(d)
print('-'* 30)
c[2] = 10
print(c)
print(d)
print('-'* 30)
c[3][0] = 5201314
print(c)
print(d)

这个时候修改c内a的值就不会影响到d了

在这里插入图片描述

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

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

相关文章

openssl RSA 密钥(key)、证书签名请求(csr)、证书(cer)的生成和例子

1. RSA 密钥(key)、证书签名请求(csr)、证书(cer)的生成顺序 2. 具体操作 a. 生成 RSA 密钥(私钥) openssl genrsa -aes256 -out ca.key 2048b. 生成证书签名请求(csr) # C-----国家(Country…

Oracle超详细(数据库编程)

目录 一、数据类型 (一)数值型数据类型 (二)字符型数据类型 (三)日期和时间型数据类型 (四)大对象和二进制数据类型 (五)其他数据类型 (六&…

离散余弦变换(Discrete Cosine Transform, DCT),信号去噪

介绍 离散余弦变换(Discrete Cosine Transform, DCT)是一种常用的信号处理工具,特别是在数据压缩、图像处理和模式识别等领域中。DCT的基本思想是将信号从空间域或时间域转换到频率域,以揭示信号中的频率成分。与离散傅里叶变换&…

C/C++网络编程--文件分块传输

文件分块传输是网络编程中一个常见的任务,尤其是在处理大文件时,将文件分块可以提高传输效率,简化错误处理,并可以实现并发传输。下面,写个从客户端向服务器发送大型数据的demo。 客户端 客户端有两点需要注意&#…

vue组件中的数据传递(2)--子组件传父组件

两种情况 子主动传 vue 父传子 子传父实现方式_vue父传子-CSDN博客 vue父子组件传值,父传子,子传父_父传子 且随时变化-CSDN博客 父主动要 Vue2.0的三种常用传值方式、父传子、子传父、非父子组件传值_父传子传-CSDN博客

File Transfer Server 文件传输服务器插件

您需要在本地不同设备之间传输文件吗?现在你可以做到了,你不必安装任何专用服务器。 文件传输服务器为您的游戏或应用程序添加了将文件从任何受支持的平台传输到任何受支持平台的能力。从移动到独立,从移动到移动等(查看支持的平台) 优势: -完整的源代码可用。 -不需要预…

【揭秘心梗元凶】不容忽视的七大生活习惯,竟是心梗“幕后推手”!

在这个快节奏的时代,心梗(急性心肌梗死)这一健康杀手正悄然逼近,威胁着越来越多人的生命安全。心梗不仅发病急骤,后果往往也极为严重。那么,心梗究竟是如何引起的?今天,我们就来揭开…

Leetcode面试经典150题-239.滑动窗口最大值

解法都在代码里,不懂就留言或者私信 官方定级hard难度,其实是medium,确实字节考过 class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length 1) {return new int[]{nums[0]};}/**我们要返回的是一个数组&#…

SoM的理解

对于终端客户来说,要思考到底怎么做一款产品。目前好像主流的就是SoC和SoM。以前联发科是有Turnkey项目,不过我记得我参与的项目,都是直接拿原厂的参考设计,基本上就是改一个壳,电路板,IO啥的都不动&#x…

土壤湿度传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 三、程序设计 main.c文件 TS.h文件 TS.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 传感器适用于土壤的湿度检测,模块中蓝色的电位器是用于土壤湿度的阈值调节,数字量输出DO可以与…

进程间的通信(IPC)基础了解,匿名管道使用,有名管道使用

进程间通信基本知识 进程间通信的定义 进程间通信方式分类 匿名管道(pipe) 匿名管道介绍 创建方式:使用 pipe 系统调用创建,返回一对文件描述符(读端和写端)。生命周期:匿名管道的生命周期与…

为什么说RAG是AI 2.0时代的“杀手级”应用?

复旦AI博士,分享AI领域全维度知识与研究。应极客时间邀请开设《RAG快速开发实战》课程,感兴趣的同学可以访问关注 https://time.geekbang.com/column/intro/100804101 随着 AI 2.0 时代的来临,我们正站在一个技术革新和行业变革的交汇点。大语…

Vue3优化表单标签与布局,解决文字过长问题(附Demo)

目录 前言1. 增加标签宽度(生效)2. 工具提示 Tooltip(勉勉强强)3. 缩小字体(不生效)4. CSS 控制换行(不推荐) 前言 好不容易构思整个表单的布局,但是个别表单的文字过长…

springboot整合logback进行日志管理(上篇)

1、前言: 在日常开发中日志的打印与日志的记录是非常重要的。市面上主流的日志管理框架有log4j、logback,二者各有优缺点v,由于项目中比较常用的是logback(我们自己项目就是用的logback),进行就主要介绍一下logback在真是项目中是如何整合的。 2、springboot默认整合的logb…

NASA数据集:50 m分辨率的雪水当量(SWE)地图的集合

ASO L4 Lidar Snow Water Equivalent 50m UTM Grid V001 ASO L4 激光雷达雪水当量 50 米UTM 网格,第 1 版 简介 该数据集包含 50 米网格雪水当量 (SWE) 值,是 NASA/JPL 机载雪地观测站 (ASO) 飞机勘测活动的一部分。 这些数据来自 ASO L4 Lidar Snow …

OLED预警系统与按键菜单交互代码实操

引言 OLED顾名思义就是一个屏幕, 我们让一个屏幕在特定的时间, 显示特定的画面, 就是我们所需要的, 因为这里是涉及到环境预警,所以需要加入一个应急接管页面的选项, 所以我们要把按键直接操作画面, 变成按键操作完, 我们根据优先级判断之后, 才能确定要显示的是哪个画面. 比如…

【无标题】书生大模型实战营闯关记录----第十二关:茴香豆:企业级知识库问答工具;Web版茴香豆使用教程;茴香豆本地化标准版部署搭建教程;知识库构建问答

0 茴香豆介绍 茴香豆 是由书生浦语团队开发的一款开源、专门针对国内企业级使用场景设计并优化的知识问答工具。在基础 RAG 课程中我们了解到,RAG 可以有效的帮助提高 LLM 知识检索的相关性、实时性,同时避免 LLM 训练带来的巨大成本。在实际的生产和生活…

Yolov5 AI学习笔记

Yolov5 AI学习笔记 环境准备 需要Python的开发环境&#xff0c;安装Anaconda。 Anaconda的一些命令&#xff1a; # 创建虚拟环境 conda create -n yolo_cpu python3.9 # 查看虚拟环境 conda env list # 激活虚拟环境 conda activate <env_name>Yolov5上手 下载源码 …

上下文的弹性

“上下文的弹性”是指在自然语言处理中&#xff0c;模型对输入文本的上下文信息的理解和利用能力。它描述了模型在处理文本时能够根据上下文信息来调整其输出的程度。具有弹性上下文的模型可以更好地处理自然语言中的语义和语境&#xff0c;从而提供更准确和有用的回答。这种弹…

这才是老板喜欢的产品经理简历

速创猫今天给大家分享的是应届毕业生产品经理简历优化案例&#xff0c;希望对大家求职有帮助。速创猫总结了以下七条简历制作干货&#xff0c;希望对大家有帮助&#xff1a; 明确目标岗位&#xff1a;在简历的开头&#xff0c;明确指出你申请的职位&#xff0c;让招聘者一眼就能…