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

16、Python面试题解析:python中的浅拷贝和深拷贝

在 Python 中,浅拷贝(Shallow Copy)深拷贝(Deep Copy) 是处理对象复制的两种重要机制,它们的区别主要体现在对嵌套对象的处理方式上。以下是详细解析:


1. 浅拷贝(Shallow Copy)

浅拷贝会创建一个新对象,但新对象中的子对象是原对象中子对象的引用。
特点

  • 只复制外层对象,嵌套对象(如列表中的列表、字典中的字典)仍与原对象共享。
  • 修改浅拷贝的外层对象不会影响原对象,但修改嵌套对象会同时影响原对象和浅拷贝。
实现方式
  • 使用 copy 模块的 copy() 方法。
  • 对列表使用切片操作 new_list = old_list[:]
  • 对字典使用 dict.copy() 方法。
示例
import copyoriginal = [[1, 2, 3], [4, 5, 6]]
shallow_copy = copy.copy(original)# 修改外层对象
shallow_copy.append([7, 8, 9])
print(original)       # [[1, 2, 3], [4, 5, 6]](原对象未改变)
print(shallow_copy)   # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 修改嵌套对象
shallow_copy[0][0] = 100
print(original)       # [[100, 2, 3], [4, 5, 6]](原对象被修改!)
print(shallow_copy)   # [[100, 2, 3], [4, 5, 6], [7, 8, 9]]

2. 深拷贝(Deep Copy)

深拷贝会递归地复制所有嵌套对象,完全独立于原对象。
特点

  • 新对象和原对象的所有层级完全独立,修改任一对象均不会影响另一个。
  • 适用于需要完全隔离的场景,但性能开销较大(尤其是大型嵌套对象)。
实现方式
  • 使用 copy 模块的 deepcopy() 方法。
示例
import copyoriginal = [[1, 2, 3], [4, 5, 6]]
deep_copy = copy.deepcopy(original)# 修改嵌套对象
deep_copy[0][0] = 100
print(original)     # [[1, 2, 3], [4, 5, 6]](原对象未被修改)
print(deep_copy)    # [[100, 2, 3], [4, 5, 6]]

3. 核心区别

特性浅拷贝深拷贝
复制层级仅外层对象递归复制所有嵌套对象
内存占用高(递归复制所有对象)
修改嵌套对象影响原对象不影响原对象
性能慢(尤其是复杂结构)

4. 使用场景

  • 浅拷贝:适用于简单对象(如单层列表、字典),或允许共享嵌套对象的场景。
  • 深拷贝:适用于需要完全独立的复杂嵌套对象(如多层结构、类实例)。

5. 注意事项

  • 不可变对象(如字符串、元组、数字)的拷贝没有实际意义,因为它们不可修改。
  • 自定义对象的拷贝需要实现 __copy__()__deepcopy__() 方法以控制拷贝行为。
  • 嵌套对象中如果包含循环引用(如对象 A 包含对象 B,对象 B 又引用对象 A),深拷贝可能引发递归错误。

6. 总结

  • 浅拷贝是“表层复制”,适合简单场景;深拷贝是“完全独立复制”,适合复杂嵌套场景。
  • 选择拷贝方式时,需根据数据结构和需求权衡性能与独立性。

相关文章:

16、Python面试题解析:python中的浅拷贝和深拷贝

在 Python 中,浅拷贝(Shallow Copy) 和 深拷贝(Deep Copy) 是处理对象复制的两种重要机制,它们的区别主要体现在对嵌套对象的处理方式上。以下是详细解析: 1. 浅拷贝(Shallow Copy&a…...

游戏引擎学习第119天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾和今天的议程 如果你们还记得昨天的进展,我们刚刚完成了优化工作,目标是让某个程序能够尽可能快速地运行。我觉得现在可以说它已经快速运行了。虽然可能还没有达到最快的速度,但我们…...

爬虫解析库:Beautiful Soup的详细使用

文章目录 1. 安装 Beautiful Soup2. 基本用法3. 选择元素4. 提取数据5. 遍历元素6. 修改元素7. 搜索元素8. 结合 requests 使用9. 示例:抓取并解析网页10. 注意事项 Beautiful Soup 是一个用于解析 HTML 和 XML 文档的 Python 库,它提供了简单易用的 API…...

OpenHarmony-4.基于dayu800 GPIO 实践(2)

基于dayu800 GPIO 进行开发 1.DAYU800开发板硬件接口 LicheePi 4A 板载 2x10pin 插针,其中有 16 个原生 IO,包括 6 个普通 IO,3 对串口,一个 SPI。TH1520 SOC 具有4个GPIO bank,每个bank最大有32个IO:  …...

【C++设计模式】观察者模式(1/2):从基础到优化实现

1. 引言 在 C 软件与设计系列课程中,观察者模式是一个重要的设计模式。本系列课程旨在深入探讨该模式的实现与优化。在之前的课程里,我们已对观察者模式有了初步认识,本次将在前两次课程的基础上,进一步深入研究,着重…...

《机器学习数学基础》补充资料:欧几里得空间的推广

在《机器学习数学基础》第 1 章介绍了向量空间,并且说明了机器学习问题通常是在欧几里得空间。然而,随着机器学习技术的发展,特别是 AI 技术开始应用于科学研究中,必然会涉及到其他类型的空间。本文即在《机器学习数学基础》一书所…...

在配置PX4中出现的问题2

想要原教程的请看:第一次配置中出现的问题 前面一切正常(gazebo导入models那一步在刚刚解压好的文件夹里就删不掉stereo_camera等文件,ls打开也看不到,应该时我下的包里面本来就没有),到 make px4_sitl_def…...

2025-2-24-4.9 单调栈与单调队列(基础题)

文章目录 4.9 单调栈与单调队列(基础题)单调栈739. 每日温度42. 接雨水单调队列239. 滑动窗口最大值 4.9 单调栈与单调队列(基础题) 很有趣的两个数据结构。 原视频讲解链接 单调栈 739. 每日温度 题目链接 给定一个整数数组 te…...

python绘图之swarmplot分布散点图

swarmplot 是 Seaborn 提供的一种用于展示分类数据分布的散点图。它的主要作用是将数据点按照分类变量(通常是离散变量)进行分组,并在每个分类中以一种非重叠的方式展示数据点的位置。这种可视化方式可以帮助我们直观地理解数据在不同分类下的…...

数据库之MySQL——事务(一)

1、MySQL之事务的四大特性(ACID)? 原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操…...

Linux学习笔记之文件

1.文件 1.1文件属性 当我们创建文件时,文件就有了对应的属性,可以用mkdir创建目录,touch创建普通文件。用ls -al查看文件属性。 从上图可以看出目录或者文件的所有者,所属组,其他人权限,创建时间等信息。由…...

LLM学习

1、基础概念篇 大模型训练三部曲Pretraining SFT RLHF...

Classic Control Theory | 13 Complex Poles or Zeros (第13课笔记-中文版)

笔记链接:https://m.tb.cn/h.TtdexbP?tkeFAlejKBSzQhttps://m.tb.cn/h.TtdexbP?tkeFAlejKBSzQ...

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…...

【MySQL】表的增删查改(CRUD)(上)

个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 CRUD:Create(新增数据)、Retrieve(查询数据)、Update(修改数据)、Delete(修改数据…...

测试用例的Story是什么?

测试用例的 Story(用户故事)是指描述某个功能或场景的具体用户需求,它通常以简短的业务背景用户操作期望结果的方式呈现,使测试人员能够理解测试的目标和价值。用户故事能够帮助团队更好地设计测试用例,确保功能满足用…...

15.4 FAISS 向量数据库实战:构建毫秒级响应的智能销售问答系统

FAISS 向量数据库实战:构建毫秒级响应的智能销售问答系统 关键词:FAISS 向量数据库、销售知识库构建、相似度检索优化、大规模问答匹配、量化索引技术 1. 销售问答场景的向量化挑战与解决方案 1.1 传统检索方案痛点分析 #mermaid-svg-AeVgih79asJb7lb8 {font-family:"…...

Golang笔记——Interface类型

大家好,这里是,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的interface数据结构类型,包括基本实现和使用等。 文章目录 Go 语言中的 interface 详解接口定义实现接口空接口 interface{} 示例&…...

如何查看图片的原始格式

问题描述:请求接口的时候,图片base64接口报错,使用图片url请求正常 排查发现是图片格式的问题: 扩展名可能被篡改:如果文件损坏或扩展名被手动修改,实际格式可能与显示的不同,需用专业工具验证…...

FreiHAND (handposeX-json 格式)数据集-release >> DataBall

FreiHAND (handposeX-json 格式)数据集-release 注意: 1)为了方便使用,按照 handposeX json 自定义格式存储 2)使用常见依赖库进行调用,降低数据集使用难度。 3)部分数据集获取请加入:DataBall-X数据球(free) 4)完…...

基于RISC-V指令集的五级流水线CPU设计与验证:包括详细说明、代码注释及Vivado平台验证

基于riscv指令集的五级流水线CPU设计及其验证 可以上板,且有详细说明和代码注释 基于vivado平台进行验证 包括verilog源代码、汇编验证代码、详细的说明文档(47页)以及PPT Modelsim quartus vivado都跑过,确认代码没有问题 已RISC…...

5步快速搞定ComfyUI-Impact-Pack中SAM模型加载失败的终极指南

5步快速搞定ComfyUI-Impact-Pack中SAM模型加载失败的终极指南 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: https://gitc…...

电机控制实战:手把手教你用Simulink调试一阶低通滤波器(附模型下载)

电机控制实战:Simulink一阶低通滤波器参数调优全流程 电机控制系统中,信号噪声就像不请自来的客人——它们总会在你最不希望出现的时候干扰系统性能。记得第一次调试伺服电机时,电流采样信号上的高频噪声让我误判了三次过流保护阈值。那次经…...

从不确定性到规律:随机信号的统计特性深度解析

1. 从噪声到规律:随机信号为何重要 每天清晨被手机闹钟唤醒时,你可能没意识到这个简单的动作背后隐藏着一个有趣的数学现象——你听到的闹铃声其实是一个典型的随机信号。与规律的音乐不同,闹铃声的波形无法用简单的数学公式预测,…...

3个步骤掌握iperf3 Windows版网络性能测试:从下载到实战应用

3个步骤掌握iperf3 Windows版网络性能测试:从下载到实战应用 【免费下载链接】iperf3-win-builds iperf3 binaries for Windows. Benchmark your network limits. 项目地址: https://gitcode.com/gh_mirrors/ip/iperf3-win-builds iperf3作为专业的网络性能测…...

从‘你好世界’到模型输入:手把手用PyTorch+Transformers Tokenizer完成文本预处理全流程

从‘你好世界’到模型输入:手把手用PyTorchTransformers Tokenizer完成文本预处理全流程 当你第一次接触自然语言处理(NLP)时,可能会被各种术语和概念搞得晕头转向。但别担心,每个NLP工程师都曾经历过从"Hello Wo…...

小心数据被‘卷’没!玩转24C02页写时必须搞懂的地址翻转与边界检查

小心数据被‘卷’没!玩转24C02页写时必须搞懂的地址翻转与边界检查 在嵌入式开发中,I2C EEPROM存储器的使用频率极高,而24C02作为经典型号,其页写功能既能提升效率又暗藏风险。许多开发者都曾遭遇过这样的噩梦:明明写入…...

3分钟搞定:让Mem Reduct内存监控工具完美适配中文界面

3分钟搞定:让Mem Reduct内存监控工具完美适配中文界面 【免费下载链接】memreduct Lightweight real-time memory management application to monitor and clean system memory on your computer. 项目地址: https://gitcode.com/gh_mirrors/me/memreduct 你…...

eqMac:macOS系统级音频均衡器与音量混合器的终极解决方案

eqMac:macOS系统级音频均衡器与音量混合器的终极解决方案 【免费下载链接】eqMac macOS System-wide Audio Equalizer & Volume Mixer 🎧 项目地址: https://gitcode.com/gh_mirrors/eq/eqMac 你是否曾为MacBook平淡的音质感到困扰&#xff1…...

从扫地机器人到AGV:拆解双轮差速模型在CoppeliaSim中的ROS实战配置

从扫地机器人到AGV:双轮差速模型在CoppeliaSim中的ROS实战指南 当你在电商平台下单的扫地机器人完成一次完美的弓字形路径清扫时,背后是一套精密的双轮差速控制系统在发挥作用。这种看似简单的运动机制,实际上支撑着从家用清洁设备到工业AGV的…...