当前位置: 首页 > news >正文

Python可变对象与不可变对象的浅拷贝与深拷贝

前言

本文主要介绍了python中容易面临的考试点和犯错点,即浅拷贝与深拷贝

首先,针对Python中的可变对象来说,例如列表,我们可以通过以下方式进行浅拷贝和深拷贝操作:

import copya = [1, 2, 3, 4, ['a', 'b']]b = a                 # 赋值,将变量a赋值给变量b
c = a.copy()          # 浅拷贝, 或者 c = copy.copy(a)
d = copy.deepcopy(a)  # 深拷贝print(a)              # [1, 2, 3, 4, ['a', 'b']]
print(b)              # [1, 2, 3, 4, ['a', 'b']]
print(c)              # [1, 2, 3, 4, ['a', 'b']]
print(d)              # [1, 2, 3, 4, ['a', 'b']]

我们可以发现,赋值、浅拷贝和深拷贝后的变量的值是一样的,但他们的“内部”真的一样吗?
本文就是回答这个问题的

参考

本文主要参考了哔哩哔哩视频:十分钟!彻底弄懂Python深拷贝与浅拷贝机制

是视频里,up主推荐了一个神奇,即pythontutor

列表(list)

结论

为了探究前言中提到的a,b,c,d是个变量是否真的一样,我们借助pythontutor来进行可视化,从内存的角度来进行探究
在这里插入图片描述
结论:

赋值:变量b和a是完全一样的,即他们完全共享同一个内存空间,a变,b也会跟着变。
浅拷贝:变量c只有跟a共享第二级的列表,而不共享第一级列表的内容,即改变a的第一层列表内容,c不会变,而改变a第二层列表的内容,c就会跟着变了。
深拷贝:变量d和a完全不共享任何内存,d完全是新开辟了一个新的空间,即可认为d和a是完全没有关系的,改变a或者d都不会影响对方。

测试

import copya = [1, 2, 3, 4, ['a', 'b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)print('a:', a)  # [1, 2, 3, 4, ['a', 'b']]
print('b:', b)  # [1, 2, 3, 4, ['a', 'b']]
print('c:', c)  # [1, 2, 3, 4, ['a', 'b']]
print('d:', d)  # [1, 2, 3, 4, ['a', 'b']]a.append(5)
a[4].append('c')print('a:', a)  # [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print('b:', b)  # [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print('c:', c)  # [1, 2, 3, 4, ['a', 'b', 'c']]
print('d:', d)  # [1, 2, 3, 4, ['a', 'b']]

结果:
在这里插入图片描述
这里的结果也不用多解释了,完全符合前面的结论

元组(tuple)

由于元组是不可变对象,那它的浅拷贝与深拷贝会一样吗?例如:

import copya = (1, 2, 3, 4, ('a', 'b'))
b = a
c = copy.copy(a)
d = copy.deepcopy(a)print('a:', a)
print('b:', b)
print('c:', c)
print('d:', d)

还是直接去看内存空间
在这里插入图片描述
结论:

对于元组来说,赋值、浅拷贝与深拷贝没有区别,都共享同一个内存,这也很好理解,因为元组是不可变对象,是无法对变量a进行修改的

列表与元组混合

列表里面嵌套元组

import copya = [1, 2, 3, 4, ('a', 'b')]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)print('a:', a)
print('b:', b)
print('c:', c)
print('d:', d)

内存情况:
在这里插入图片描述
结论:

就算是深拷贝,元组部分都是共享内存的

元组里面嵌套列表

import copya = (1, 2, 3, 4, ['a', 'b'])
b = a
c = copy.copy(a)
d = copy.deepcopy(a)print('a:', a)
print('b:', b)
print('c:', c)
print('d:', d)

内存情况:
在这里插入图片描述
结论:

完全同列表的情况

相关文章:

Python可变对象与不可变对象的浅拷贝与深拷贝

前言 本文主要介绍了python中容易面临的考试点和犯错点,即浅拷贝与深拷贝 首先,针对Python中的可变对象来说,例如列表,我们可以通过以下方式进行浅拷贝和深拷贝操作: import copya [1, 2, 3, 4, [a, b]]b a …...

滑模控制(Sliding mode control)快速入门

0. 简介 最近作者受到邀请,让我帮忙给刚入门的学弟讲讲滑模控制。可是作者也不知道怎么向未入门的学弟讲解这些基础知识,所以作者翻了翻近几年写的很好的文章以及视频。综合起来,来总结出一套比较基础,且适用于初学者的文章吧。这…...

golang的垃圾回收详解

golang的垃圾回收详解 一、三色标记法 作为一门现代化的语言,golang与java一样,都在语言中内置了垃圾回收的功能,不需要程序员自己去回收堆内存。而垃圾回收中,最重要的两个部分就是垃圾检测算法以及垃圾回收算法。垃圾检测算法决…...

线上负载过高排查(top/vmstat/ifstat/free/df)

目录 一、五大命令 二、故障排查步骤 1、top命令找出CPU占比最高的 2、ps -ef 或者 jps -l进一步定位 3、ps -mp位到具体线程或者代码 4、jstack精准定位到错误的地方 本文通过学习:周阳老师-尚硅谷Java大厂面试题第二季 总结的LinuxJDK命令操作相关的笔记 一…...

Java的注解(Annotation)

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。例如JUnit单元测试中的Test方法,可以使得方法直接运行。JUnit单元测试Test单元测试是针…...

信息系统项目管理师:配置管理

配置管理指的是在一个系统或软件中对配置项的管理,包括对配置项的定义、存储、跟踪和修改等一系列活动。配置项可以是硬件设备、软件组件、系统设置、网络配置等,配置管理旨在确保在不同时间点或环境下系统或软件的配置项的正确性和一致性。通过配置管理…...

web餐饮开源程序

简介 一款专门针对餐饮行业而开发桌面应用程序 技术 借助Panuon.UI.Silver控件库,开发的一款餐饮软件。 运行环境:.NETFramework,Versionv4.8。 运行数据库:MySql。 ORM框架:SqlSugar。 第三方插件:Panuon.UI.Silv…...

28个案例问题分析---027---单表的11个Update接口--MyBatis

一:背景介绍 项目开发中。我们使用的是MyBatis,在MyBatis的xml文件里,两个表的更新功能,写了足足11个更新接口,毫无复用的思想 这种方式可以正常的实现功能,但是没有复用,无论是从时间上还是维…...

大数据开发治理平台 DataWorks

序言学习下阿里DataWorks的设计理念以及要做的事情cuiyaonan2000163.com参考文档:https://www.aliyun.com/product/bigdata/idehttps://help.aliyun.com/document_detail/73015.htmlhttps://help.aliyun.com/document_detail/324149.html ----数据治理LaunchDataWorks基于阿里云…...

Xshell的下载、使用、配置【ssh、telnet、串口】

目录 一、概述 二、Xshell的使用  2.1 Xshell使用ssh协议远程连接Linux主机或服务器  2.2 Xshell使用telnet协议远程连接Linux开发板  2.3 Xshell使用SERIAL协议远程连接Linux开发板 三、Xshell常用配置  3.1 配置默认会话属性 一、概述 Xshell是由NetSarang公司开发的强大…...

C++回顾(七)—— 面向对象模型

7.1 静态成员变量和静态成员函数 7.1.1 静态成员变量 关键字 static 可以用于说明一个类的成员;静态成员提供了一个同类对象的共享机制;把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static …...

开源监控服务uptime-kuma

好久没写文章了,刚好最近用了一个开源的监控服务,感觉蛮有意思的,记录一下 (一)安装 uptime-kuma安装方式有几种,这里当然是选择大家都爱的docker,一条命令搞定 docker run -d --restartalways -p 3001:…...

JavaScript混淆技术:了解其核心原理和常用手段

当今互联网时代,JavaScript已经成为了web前端开发的重点技术之一。其中,JavaScript代码的安全性问题一直是关注的焦点。为了保护JavaScript代码的安全性,很多人对其进行加密处理,众所周知,对于单纯的加密算法&#xff…...

大型医院云HIS系统:采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发 融合B/S版电子病历系统

一套医院云his系统源码 采用前后端分离架构,前端由Angular语言、JavaScript开发;后端使用Java语言开发。融合B/S版电子病历系统,支持电子病历四级,HIS与电子病历系统均拥有自主知识产权。 文末卡片获取联系! 基于云计…...

SAP UI5 Upload/Download file through NetWeaver Gateway

1、创建 SEGW对象 2、创建Entity Type 要把Media 标识打上 3、 激活对象然后到DPC Class的扩展对象里面重定义 /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM /IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_STREAM /IWBEP/IF_MGW_APPL_SRV_RUNTIME~UPDATE_STREAM METHOD /iwbep/if_m…...

opencv校正图像

目录1、前言2、例程2.1、代码2.2、效果口罩说明书网页3、按步骤分析转灰度图降噪 Canny边缘检测膨胀(可视具体情况省略)轮廓检索选取角度1、前言 我们用相机拍照时,会因为角度问题造成拍歪,会影响图像的识别,这时就需…...

JavaScript:函数与箭头函数的区别

ref 1. 定义 函数 function getName() {}箭头函数 const getName () > {}2. 命名 函数分为匿名、具名。 function getName() {} let getName function () {}箭头函数只有匿名。 const getName () > {}3. 构造函数 箭头函数都是匿名函数,所以不能作为构造…...

八股文(四)

目录 一、 Vue2的双向数据绑定原理 二、 vue2数据绑定缺点是什么?vue3是怎么解决的? (1)因为vue2.0 object.defineProperty只能劫持对象属性 (2)Proxy是直接代理对象 (3)proxy不…...

XSS挑战赛(xsslabs)1~10关通关解析

简介 XSS挑战赛,里面包含了各种XSS的防御方式和绕过方式,好好掌握里面的绕过细节,有助于我们更好的去发现XSS漏洞以及XSS的防御。本文更多的是分享解析的细节,不是一个标准的答案,希望大家在渗透的时候有更多的思维。…...

什么是以太网供电POE

POE指的是以太网供电,就是一根网线在传输网络的同时还传输设备所需的电源。我们最常见的就是通过POE交换机连接网络摄像头,网络摄像头无需的电源适配器,仅靠一根网线就能实现电源和网络的传输。POE供电一般可以到100米。POE包含两个部分&…...

CTFshow Misc挑战:从WinRAR到明文攻击的实战解析

1. 初识CTFshow Misc挑战:压缩包破解的奥秘 第一次接触CTFshow的Misc题目时,我被那个看似普通的压缩包难住了整整两天。那是个名为6.zip的文件,用360解压提示需要密码,这种场景在CTF比赛中实在太常见了。很多新手遇到这种情况会直…...

避坑指南:PyTorch QAT模型部署时,你的推理结果为什么对不上?从量化参数到计算细节的排查思路

PyTorch QAT模型部署实战:量化推理结果异常的全链路诊断手册 当你的量化感知训练(QAT)模型在部署环节突然"翻车"——推理结果与训练时相差甚远,这种场景就像精心调制的咖啡在最后一刻被打翻。本文将带你深入量化模型的黑…...

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴+趋势分析+结论建议

Qwen3.5-2B图文对话实战:上传实验数据图→自动识别坐标轴趋势分析结论建议 1. 引言:当AI遇见科研数据分析 作为一名科研工作者,你是否经常遇到这样的场景:实验室刚跑出一组数据,你迫不及待想分析趋势,却发…...

CLIP-GmP-ViT-L-14图文匹配工具入门必看:上传图片+批量文本匹配全流程

CLIP-GmP-ViT-L-14图文匹配工具入门必看:上传图片批量文本匹配全流程 你是不是经常好奇,AI到底能不能看懂图片?比如,你给它一张小狗的照片,它能准确说出这是“一只狗”而不是“一只猫”或“一辆车”吗?今天…...

知乎上线求职工具,助力毕业生破困局

知乎上线求职利器,直击毕业生痛点2026届全国普通高校毕业生预计达1270万人,再创历史新高。与此同时,AI技术加速行业重构,部分传统岗位需求收缩,大量毕业生陷入“海投”困境,难以精准定位自身。在此背景下&a…...

ComfyUI ControlNet模型与预处理器搭配秘籍:提升AI绘画精度的关键技巧

ComfyUI ControlNet模型与预处理器搭配秘籍:提升AI绘画精度的关键技巧 在AI绘画领域,ControlNet已经成为精细控制图像生成的重要工具。对于已经熟悉ComfyUI基础操作的用户来说,掌握ControlNet模型与预处理器的搭配技巧,是突破创作…...

OpenCore Legacy Patcher实用指南:让老旧Mac焕发新生

OpenCore Legacy Patcher实用指南:让老旧Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 随着苹果不断推进macOS系统更新,…...

AI辅助架构设计:让快马智能生成符合最佳实践的SpringBoot项目骨架

今天想和大家聊聊如何用AI工具快速搭建一个符合现代最佳实践的SpringBoot项目骨架。作为一个经常需要从零开始搭建项目的开发者,我发现传统的手动创建项目方式效率太低,而且容易遗漏一些关键配置。最近尝试了InsCode(快马)平台的AI辅助功能,发…...

ESP32嵌入式系统工具库:运行时监控、资源池与高精度时间管理

1. 项目概述sys_utils是一个面向 ESP32 平台、深度适配 ESP-IDF(Espressif IoT Development Framework)生态的系统级工具库。其定位并非通用 C 标准库的替代品,而是聚焦于嵌入式实时系统开发中高频、易错、跨模块复用的底层支撑需求——在裸机…...

FPGA新手避坑指南:用Xilinx MIG IP核驱动DDR3内存的完整配置流程(以MT41J256M16为例)

FPGA新手避坑指南:Xilinx MIG IP核驱动DDR3内存的完整配置流程(以MT41J256M16为例) 第一次接触FPGA与DDR3接口设计时,面对密密麻麻的芯片手册和复杂的IP核配置界面,很多工程师都会感到无从下手。本文将手把手带你完成从…...