深拷贝和浅拷贝的区别

python之浅拷贝和深拷贝的区别 赋值 在我们开始讨论浅拷贝和深拷贝的区别之前,首先我们必须清楚什么是赋值? 在Python中,所谓的赋值实际上就是对象引用的传递而已,当创建一个对象的时候,再赋值给另外一个变量的时候,并不是赋值给另一个变量。而是把这个变量在地址空间的id地址值传递给另一个变量,简单的说就是拷贝了这个对象的引用。看图片,可能比较容易理解。 从图中,我们很容易的看到,a和b两个变量在地址空间中是一样。后来,我们又给... 阅读详情

 retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝(浅拷贝),copy 是内容拷贝(深拷贝)。

ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutableCopying 协议的类才可以发送mutableCopy消息。假如发送了一个没有遵守上诉两协议而发送 copy或者 mutableCopy,那么就会发生异常。但是默认的ios类并没有遵守这两个协议。如果想自定义一下copy 那么就必须遵守NSCopying,并且实现 copyWithZone: 方法,如果想自定义一下mutableCopy 那么就必须遵守NSMutableCopying,并且实现 mutableCopyWithZone: 方法。

由于在程序中经常会遇到集合类的传值,所以,简单的retain未必够用,需要对集合内容的拷贝,也就是深拷贝。

  下面我们就来探讨一下。

  Ios提供了copy和mutablecopy方法,顾名思义,copy就是复制了一个imutable的对象,而mutablecopy就是复制了一个mutable的对象。以下将举几个例子来说明。

1.     系统的非容器类对象

这里指的是NSString,NSNumber等等一类的对象。

对于系统的非容器类对象,我们可以认为,如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。

2.     系统的容器类对象 

指NSArray,NSDictionary等。对于容器类本身,上面讨论的结论也是适用的,需要探讨的是复制后容器内对象的变化。

    //copy返回不可变对象,mutablecopy返回可变对象


对于容器而言,其元素对象始终是指针复制。如果需要元素对象也是对象复制,就需要实现深拷贝

3.     自定义对象

如果是我们定义的对象,那么我们自己要实现NSCopying,NSMutableCopying这样就能调用copy和mutablecopy了



开源LocalAI本地人工智能安装教程 LocalAI是一款能在本地运行的人工智能应用,它兼容了OpenAI API规范,它可以在普通的电脑运行,不需要GPU,也不需要联网,音频转录 阅读详情

相关推荐

【SAP PO】SAP PO 接口配置完整教程之二REST服务对接

SAP PO 接口配置完整教程之二REST服务对接

XLevon的博客 1万+

浅拷贝和深拷贝的区别

1、浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。 2、深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。 3、区别:可变对象就不会这样会修改值后另存到一个新的地址上,而是直接再原对象的地址上把值给改变了,这个对象依然执行这个地址 4、本质区别:可变对象修改了值,不会新建一个内存地址的对象,不可变对象如果修改了值,及时复制了一份新的内存地址,原始地址的值不会被

m0_73770538的博客 1万+

超详细YOLOv8目标检测全程概述:环境、训练、验证与预测详解

这篇博文提供了一个关于使用YOLOv8进行目标检测的全面指南,包括环境搭建、模型训练、验证和预测的详细步骤,以及如何解释训练过程中生成的各种图表和数据。整篇文章为读者提供了一个关于如何利用YOLOv8进行目标检测的实践指南,从环境搭建到模型部署,再到结果分析,每一部分都给出了详细的步骤和解释。此外,还有对于模型输出的解释,帮助读者更好地理解和使用YOLOv8模型。

CDBmax的博客 10万+

浅拷贝与深拷贝的区别

浅拷贝与深拷贝 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 二、浅拷贝与深拷贝 深拷贝和浅拷贝是只针对Object和Array这样的引用数

SSophia的博客 7万+

DSH-Work:一个让DeepSeek下载即用的Harness客户端

使用大模型工具时,环境配置往往比模型本身更让人头疼。DeepSeek Harness作为一类封装层,将模型调用、上下文管理、参数控制等复杂细节统一收拢,对外提供简洁操作入口。开源的DSH-Work正是这样一款Harness客户端,它通过自带运行时与保守默认配置,实现了下载即用、免配环境的目标,让使用者无需掌握Python、CUDA等专业知识即可快速连接DeepSeek云端或本地服务。对于非技术背景的用户,它降低了AI工具的使用门槛;对于开发者,它把时间从环境排错中解放出来,更专注于提示词调优与工作流设计。无

weixin_29048309的博客 343

利用 Openocd 和 FT2232H 实现 ARMv8(Coretex-A53)高效调试方案

本文详细介绍了如何利用开源工具OpenOCD与高性能USB转接芯片FT2232H,构建一套针对ARMv8架构(如Cortex-A53)的高效、低成本调试方案。内容涵盖从环境搭建、驱动配置、核心调试架构解析到实战问题排查的全过程,帮助开发者实现对多核处理器的透明、可控调试,是嵌入式Linux及底层开发的实用指南。

weixin_29163581的博客 280

深拷贝与浅拷贝的区别及实现方式

浅拷贝只复制对象的第一层属性。这意味着,如果原对象或数组中的值是基本类型(如数字、字符串、布尔值等),那么新对象或数组中的对应值是独立的副本。但是,如果原对象或数组中的值是引用类型(如对象、数组等),那么新对象或数组中的对应值只是指向原引用的一个新引用。 深拷贝会递归地复制对象的所有层级,包括嵌套的对象和数组。这意味着深拷贝创建的新对象与原对象完全独立,任何对原对象的修改都不会影响到新对象,反之亦然。

jxnd123456的博客 7582

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

EMD-LSTM时序预测 | MATLAB实现基于EMD-LSTM时间序列预测(EMD分解结合LSTM长短期记忆神经网络)

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 657

深拷贝与浅拷贝

深拷贝与浅拷贝

weixin_57959921的博客 8444

芒果YOLO11改进21:检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

检测头Head篇:即插即用|新颖轻量化非对称多级压缩LADH检测头,原创改进适配YOLOv8高效检测头,检测头新颖性改进,全网首发独一份

包括YOLOv5、YOLOv7、YOLOv8等模型改进 791

uni-app - 将 base64 图片编码转为 Blob 本地文件路径(把base64类型的图片,转换成blob二进制文件流)适用于 uni-app / vue.js / JavaScript

uni-app/vue.js/JavaScript将base64转Blob,uniappapp端如何将图片的base64编码转换成File对象或Blob,uni-app/vue.js/JavaScript中拿到base64转blob对象,uniapp图片base64格式转blob格式方法,uniapp上传图片压缩转base64码与base64转图片路径,Base64/Blob/File图片文件转换,url、base64、blob相互转换方法,读取本地文件为Base64并转成B

🏆 前端领域优质创作者 1万+

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)

在实现深拷贝时,通常需要递归地复制对象的引用类型属性,以确保所有相关对象都被复制。而浅拷贝则只需要复制对象的基本属性即可。

qq_30657563的博客 5835

【DaVinci Developer工具实战】03 -导入xml文件

本文档描述了 DaVinci Developer 导入数据的的具体功能 ,它适用于导入AUTOSAR SWC 模板【AUTOSAR XML 文件】 文件。

1991

浅拷贝与深拷贝的区别(详解)

浅拷贝与深拷贝的区别 html 浅拷贝与深拷贝 一、数据类型 数据分为基本数据类型(String, Number, Boolean, Null, Undefined,Symbol)和对象数据类型。 基本数据类型的特点:直接存储在栈(stack)中的数据 引用数据类型的特点:存储的是该对象在栈中引用,真实的数据存放在堆内存里 引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。 ​​ 二、浅拷贝与深拷贝 深拷贝和浅拷

Mark Sheng的博客 12万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

深拷贝与浅拷贝的原理和区别

我特别想写这篇,因为我看到了一篇非常非常优秀的博客,讲的巨好!直接贴上链接,强烈建议大家去阅读原博主的 https://www.cnblogs.com/echolun/p/7889848.html 1.深拷贝和浅拷贝的区别 B复制A,A变,B变,浅拷贝。 B复制A,A变,B不变,深拷贝。 举个简单example 平常的a赋值给b,a变,b并不会变。而对于对象obj2,这种简单的赋值,obj变,obj2变,就是浅拷贝了。 这是为啥呢?这就要我们从数据类型说起了。。。。 2.基本数据类型和引用数据类型 基

weixin_43795084的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

一文彻底搞懂深拷贝和浅拷贝的区别

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在复制对象或数据结构时所使用的两种不同的拷贝方法,它们之间的区别主要在于拷贝的程度和对原始对象内部结构的影响。

永远在路上 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python 深拷贝和浅拷贝的区别

Python 深拷贝和浅拷贝的区别 深浅拷贝在python中经常使用,其区别的外在表现是: 使用浅拷贝,当原容器对象中可变对象中有元素发生变化,拷贝得到的对象也会变化。而使用深拷贝时,不会有这种问题。 浅拷贝: # -*- coding: utf-8 -*- # @File : 浅拷贝.py # @Author : Runpeng Zhang # @Date : 2020/2/10 # @...

Rp的博客 4654

C++浅拷贝和深拷贝的区别

先考虑一种情况,对一个已知对象进行拷贝,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。 先看一个例子,有一个学生类,数据成员时学生的人数和名字: #include <iostream> using nam...

测试0901-1 9517

python的复制,深拷贝和浅拷贝的区别

python的复制,深拷贝和浅拷贝的区别 在python中,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用 一般有三种方法, alist=[1,2,3,["a","b"]] (1)直接赋值,默认浅拷贝传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变 >>> b=ali...

zhubaoJay的博客 2万+

【C#】深拷贝和浅拷贝、区别

浅拷贝:只复制值类型字段,引用类型字段只复制引用,使用实现。深拷贝:递归复制所有引用类型字段,创建完全独立的副本,可以通过手动复制或序列化实现。推荐方法:如果对象结构简单,可以手动实现深拷贝。如果对象结构复杂且支持序列化,可以使用序列化方法实现深拷贝。

weixin_44939430的博客 877

深拷贝和浅拷贝的区别和与原理

深拷贝和浅拷贝的区别和与原理

weixin_45753447的博客 1万+

深拷贝和浅拷贝区别是什么?

深拷贝和浅拷贝区别是什么? 复制一个 Java 对象 浅拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针,不复制堆内存中的对象。 深拷贝:复制基本类型的属性;引用类型的属性复制,复制栈中的变量 和 变量指向堆内存中的对象的指针和堆内存中的对象。 如何实现对象克隆? 【Java面试题与答案】整理推荐 基础与语法 集合...

ConstXiong 2万+

C++深拷贝和浅拷贝的区别

在 C++ 中,浅拷贝和深拷贝是处理对象复制时非常关键的概念,尤其是当对象内部有指针成员指向动态分配的内存时。对于指针成员,浅拷贝只复制指针的值(即内存地址),而不复制指针所指向的数据。这意味着原对象和拷贝对象的指针成员将指向同一块内存地址。选择浅拷贝还是深拷贝取决于具体情况,但在涉及到动态内存管理的场景下,深拷贝通常是必要的,以确保数据的独立性和程序的稳定性。这样,原对象和拷贝对象的指针成员就分别指向不同的内存地址,互不干扰。当一个对象被浅拷贝时,所有的成员变量都会直接复制其值,包括指针类型的成员变量。

宁静致远的博客 1066
上一篇: 强引用(strong)\弱引用(weak)\unsafe_unretained的区别
下一篇: iOS开发之邮件发送
SMY_API
博客等级 码龄13年 5粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值