python深浅拷贝

【 一 】Python 深拷贝和浅拷贝概念理解

        个人见解:      

        浅拷贝,指的是重新分配一块内存,创建一个新的对象,但里面的元素是原对象中各个子对象的引用。

        深拷贝,是指重新分配一块内存,创建一个新的对象,并且将原对象中的元素,以递归的方式,通过创建新的子对象拷贝到新对象中。因此,新对象和原对象没有任何关联。

 【 1】 深拷贝

  • 拷贝可变数据类型,如列表容器:

    • a = [1, 2, [3, 4]]
    • b = copy.deepcopy(a)
  • a 与 b 所指的列表容器的空间地址不一致,即 id(a) != id(b)

  • a 与 b 列表容器中的可变数据类型的空间地址不一致

  • a 与 b 列表容器中的不可变数据类型的空间地址一致

注意:

  • a 列表容器中的某些元素发生改变时,b 容器中的相应元素是否会发生相同的改变?

    答案是: a 容器中的任何元素发生任何变化,与 b 容器毫无瓜葛,b 中元素不会发生变化 !

图示


【2】浅拷贝

  • 拷贝可变数据类型,如列表容器:

    • a = [1, 2, [3, 4]]
    • b = copy.copy(a)
  • a 与 b 所指的列表容器的空间地址不一致,即 id(a) != id(b)

  • a 与 b 列表容器中的所有元素的空间地址都是一致的!

注意:

  • a 列表容器中的某些元素发生改变时,b 容器中的相应元素是否会发生相同的改变?

    答案是:

    1. 若 a 容器中的第一级元素发生改变,b 容器中的相应的元素不会发生改变!
    2. 若 a 容器中的第二级乃至更深层级的元素发生改变,b 容器中的相应元素也会发生相同的改变!

图示


1|3深浅拷贝不可变元素
 

import copy a = 10 b = copy.copy(a) b = copy.deepcopy(a)

当深浅拷贝不可变数据类型,如整型时,a 与 b 所指向的空间地址是一致的!

图示

总结:

  • 浅copy: 不管多么复杂的数据结构,浅拷贝都只会copy一层
  • deepcopy : 深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,我们对这两个变量中任意一个修改都不会影响其他变量

注意:深浅拷贝都是拷贝的数据的内存地址

 代码展示:

import copy

list1 = [1, 2, 3, 4, [5, 6]]

print('list1的id:', id(list1))

print('list1第4个元素的id:', id(list1[4]))

# 浅拷贝

list2 = copy.copy(list1)

print(list2)

print('list2的id:', id(list2))

print('list2第4个元素的id:', id(list2[4]))

# 深拷贝

list3 = copy.deepcopy(list1)

print(list3)

print('list3的id:', id(list3))

print('list3第4个元素的id:', id(list3[4]))

# 改变list1中的元素

list1[2] = 7

list1[4][1] = 8

print('list1:', list1)

print('list2:', list2)

print('list3:', list3)

运行结果:

list1的id: 53090704
list1第4个元素的id: 52895096
[1, 2, 3, 4, [5, 6]]
list2的id: 53091024
list2第4个元素的id: 52895096
[1, 2, 3, 4, [5, 6]]
list3的id: 53091304
list3第4个元素的id: 53091664
list1: [1, 2, 7, 4, [5, 8]]
list2: [1, 2, 3, 4, [5, 8]]
list3: [1, 2, 3, 4, [5, 6]]

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Post Quantum Fuzzy Stealth Signatures and Applications

目录 笔记后续的研究方向摘要引言贡献模块化框架模糊构造实施适用于FIDO Post Quantum Fuzzy Stealth Signatures and Applications CCS 2023 笔记 后续的研究方向 摘要 自比特币问世以来,基于区块链的加密货币中的私人支付一直是学术和工业研究的主题。隐形地址…

elasticsearch 内网下如何以离线的方式上传任意的huggingFace上的NLP模型(国内避坑指南)

es自2020年的8.x版本以来,就提供了机器学习的能力。我们可以使用es官方提供的工具eland,将hugging face上的NLP模型,上传到es集群中。利用es的机器学习模块,来运维部署管理模型。配合es的管道处理,来更加便捷的处理数据…

DSGN:用于 3D 目标检测的深度立体几何网络

论文地址:https://www.jianshu.com/go-wild?ac2&urlhttps%3A%2F%2Farxiv.org%2Fpdf%2F2001.03398v3.pdf 论文代码:https://github.com/chenyilun95/DSGN 论文背景 大多数最先进的 3D 物体检测器严重依赖 LiDAR 传感器,因为基于图像的方…

IDEA中表明或者字段找不到时报红

问题 idea 中mysql的sql语句报红,无论表名还是表字段 原因 是由于sql方言导致的 当我们选择某一个sql方言的时候,xml配置会按照指定规则校验sql是否规范,并给出提示 解决方案 取消sql方言,设置sql方言为None。设置完重启idea既…

理解网络通信中的关键因素-带宽

在今天的数字时代,我们经常听到“带宽”的词汇,尤其是在谈论互联网速度、网络连接和数据传输时。带宽是网络通信的关键概念,对于我们的在线体验至关重要。 带宽的定义 带宽是一个用于描述网络通信速度和容量的术语。它通常用于衡量网络连接…

解决firefox(火狐)浏览器使用transform: scale导致的border不显示或显示不全的问题;

最近火狐遇到了此问题,查了许久没有解决办法也有说是因为火狐不支持小于1px单位的,也有说火狐浏览器本身的问题,然后也没有解决方案,最后没办法只能用最笨的方法解决。。。。 只针对Firefox使用CSS,使用’-moz-documen…

层流燃烧模拟的技术研究与实践

层流燃烧模拟的技术研究与实践 一、引言 层流燃烧,作为一种基础而重要的燃烧类型,广泛存在于各种工业应用中,如发动机、燃气轮机、燃烧室等。为了更好地理解和优化这一过程,科研人员运用计算流体动力学(CFD)工具进行模拟,以期能更深入地洞察其内在机制。 二、层流燃烧…

MQTT 协议入门:轻松上手,快速掌握核心要点

文章目录 什么是 MQTT?MQTT 的工作原理MQTT 客户端MQTT Broker发布-订阅模式主题QoS MQTT 的工作流程开始使用 MQTT:快速教程准备 MQTT Broker准备 MQTT 客户端创建 MQTT 连接通过通配符订阅主题发布 MQTT 消息MQTT 功能演示保留消息Clean Session遗嘱消…

深度拷贝 deepClone

/*** 深度克隆对象* param {*} value 需要克隆的值 * param {WeakMap} cache 使用 WeakMap 解决环形引用问题,防止内存泄漏 */ function deepClone(value, cache new WeakMap()) {// 基础数据if(typeof value ! object || value null) {return value;}// 解决环形…

Enterprise Architect 12版本使用教程

Enterprise Architect 12版本使用教程 1.下载安装Enterprise Architect 122.Enterprise Architect原始DDL模板配置及存在的问题1.DDL Column Definition原始模板(没有default值:可忽略)2.DDL Data Type原始模板(timestamp等时间字…

BCrypt加密解密工具类方法

BCrypt加密解密工具类方法 直接上代码 package com.loit.park.common.utils;import org.springframework.security.crypto.bcrypt.BCrypt;/*** author hanjinqun* date 2023/5/13* BCrypt工具类*/ public class BCryptUtils {/*** 加密*/public static String hashpw(String s…

【JavaEE进阶】 Spring使用注解存储对象

文章目录 🌴序言🍀前置⼯作:配置扫描路径🎄添加注解存储 Bean 对象🌳类注解🚩为什么要这么多类注解🚩注解之间的联系 🎋⽅法注解 Bean🚩⽅法注解需要配合类注解使⽤ ⭕总…

C //习题10.8 将第7题结果仍存入原有的“stu_sort“文件而不另建立新文件。

C程序设计 (第四版) 谭浩强 习题10.8 习题10.8 将第7题结果仍存入原有的"stu_sort"文件而不另建立新文件。 IDE工具:VS2010 Note: 使用不同的IDE工具可能有部分差异。 说明:此题同习题10.7的代码,唯一的区…

大数据毕业设计之前端03:logo、menu的折叠展开实现

关键字:BuildAdmin、pinia、logo、aside、menu、菜单折叠、Vue、ElementUI 前言 上一篇文章中,借助aside的实现讲了一些开发的小技巧,以及css的解读。本篇文章主要写一下如何填充aside的内容。 aside主要是由两个部分组成的:log…

Mysql启动占用内存过高解决

Hi, I’m Shendi Mysql启动占用内存过高解决 前言 最近服务器内存不够用了,甚至还出现了内存溢出问题,导致程序宕机。但请求与用户量并没有多少,所以从各种启动的程序中想方设法的尽可能的减少其占用的内存。 而在我的服务器中,…

数字化和数智化一字之差,究竟有何异同点?

在2023杭州云栖大会的一展台内,桌子上放着一颗番茄和一个蛋糕,一旁的机器人手臂融入“通义千问”大模型技术后,变得会“思考”:不仅能描述“看”到了什么,还能确认抓取的是番茄而不是蛋糕。 “传统的机械臂通常都只能基…

从0到1,手把手带你开发截图工具ScreenCap------001实现基本的截图功能

ScreenCap---Version:001 说明 从0到1,手把手带你开发windows端的截屏软件ScreenCap 当前版本:ScreenCap---001 支持全屏截图 支持鼠标拖动截图区域 支持拖拽截图 支持保存全屏截图 支持另存截图到其他位置 GitHub 仓库master下的Scr…

二百一十四、Linux——Linux系统时间比电脑时间慢5分钟

一、目的 服务器重启后,发现Linux的系统时间比电脑时间慢5分钟,于是看了些博客,终于找到了解决方法,记录一下,以防止后面出现同样的问题 二、问题 通过date查看,Linux系统时间比电脑时间慢5分钟 &#…

solidworks打开图纸零件隐藏看不到怎么办?

solidworks打开图纸零件隐藏看不到怎么办?solidworks打开时看不到零件图像,显示空白文档,该怎么解决这个问题呢?下面我们就来看看详细的教程,需要的朋友可以参考下 1、打开SolidWorks ,并选中需要打开的零…

【公式】逻辑回归的损失函数是什么

目录 一、逻辑回归简介 二、逻辑回归模型的损失函数 2.1 损失函数与其意义 2.2 逻辑回归的损失函数 2.3 从交叉熵角度理解逻辑回归的损失函数 2.4 从对数似然角度推导逻辑回归的损失函数 三、逻辑回归损失函数的梯度 3.1 逻辑回归损失函数的梯度公式 3.2 用梯度下降法…