python 基础:copy和deepcopy详解

python 的copy 模块提供了 copydeepcopy 两个函数来拷贝对象。copy.copy 函数用于浅拷贝,而copy.deepcopy 函数用于深拷贝

  • 我们寻常意义的拷贝就是深拷贝,即将被拷贝对象完全再拷贝一遍作为独立新个体单独存在。所以改变原有被拷贝对象不会对已经拷贝出来的新对象产生影响。
  • 浅拷贝并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签(相当于c++中的引用),所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的拷贝有所不同了。

示例

案例1

import copy#浅复制
list = [1, [2, 3], [4, 5]]
shallow_copy = copy.copy(list)#深复制
deep_copy = copy.deepcopy(list)#修改原始对象中的嵌套列表
list[1][0] = 'X'print(list)           #[1, ['X', 3], [4, 5]]
print(shallow_copy)   #[1, ['X', 3], [4, 5]]  (共享嵌套列表的引用)
print(deep_copy)      #[1, [2, 3], [4, 5]]    (独立的嵌套列表)
  • 可以看到原数据list改变, 浅拷贝shallow_copy数据也跟着改变
  • deep_copy: 它是从原对象list独立出来的副本,不会随着原对象的改变而改变

案例2

>>> import copy
>>> origin = [1,2,[3,4]]
#origin里边有三个元素:1,2,[3,4]
>>> cop1 = copy.copy(origin)
>>> cop2 = copy.deepcopy(origin)
>>> cop1 == cop2
True
>>>cop1 is cop2
False
#cop1和cop2看上去相同,但已不再是同一个object
>>> origin[2][0] = "hey!"
>>> origin
[1,2,['hey!',4]]
>>>cop1
[1,2,['hey!', 4]]
>>> cop2
[1,2,[3,4]]
#把origin内的子list [3,4]改掉了一个元素,观察cop1和cop2
  • 可以看到 cop1,也就是 shallow copy 跟着 origin 改变了。而 cop2 ,也就是 deep copy 并没有变
  • 似乎 deep copy 更加符合我们对复制的直觉定义: 一旦复制出来了,就应该是独立的了。如果我们想要的是一个字面意义的copy,那就直接用 deep_copy 即可。

参考: https://www.jb51.net/article/264894.htm

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

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

相关文章

nginx目录枚举修复手册

nginx目录枚举修复手册 漏洞背景 修复方式: ssh zujian2 sudo vi /data/apps/nginx/conf/conf.d/default.conf server {

网页如何集成各社区征文活动

Helllo , 我是小恒 由于我需要腾讯云社区,稀土掘金以及CSDN的征文活动RSS,找了一下没发现,所以使用GET 请求接口对网页定时进行拉取清洗,甚至无意间做了一个简单的json格式API 最终网址:hub.liheng.work API:http://hub.liheng.wo…

升级! 测试萌新Python学习之连通数据库Pymsql增删改及封装(四)

pymysql 数据库概述python对数据库的增删改查pymysql核心操作事务事务操作pymysql工具类封装每日复习ChatGPT的回答 数据库概述 分类 关系型数据库: 安全 如, mysql oracle SQLite…database tables 行列 非关系型数据库: 高效 如, redis mongoDB…数据存储结构多样 键值对…

Python Socket

一、服务端 from socket import *def print_hi(name):print(fHi, {name})# 允许所有ip连接IP 0.0.0.0# 端口PORT 8003# 定义一次从socket缓冲区读入512个字节数据BUFFER_LEN 512# 实例化socket对象 listenSocket 用来监听的socketlistenSocket socket(AF_INET, SOCK_STREA…

主题替换解决方案-打造完善多主题

目录 01: 主题替换原理分析 02: TailWind DarkMode 原理 03: 为组件增加 Dark 适配 04: DarkMode 在复杂应用中的实现逻辑分析 05: DarkMode 在复杂应用中的实现 06: 跟随系统的主题变更 07: 总结 01: 主题替换原理分析 主题替换原理:通过类名来控制对应的样…

2023-2024 联邦推荐 × 顶会

目录 AAAI2024 Federated Contextual Cascading Bandits with Asynchronous Communication and Heterogeneous Users General Commerce Intelligence: Glocally Federated NLP-Based Engine for Privacy-Preserving and Sustainable Personalized Services of Multi-Merchan…

Kubernetes——命令指南

目录 前言 1.检查集群状态 2.使用Pod 3.使用部署 4.使用服务 5.使用 ConMap 和 Secret 6.调试与故障排除 7.清理 8.使用命名空间 9.管理持久卷 10.处理节点 11.资源配额和限制范围 12.访问API对象 13.总结 前言 kubectl 是针对Kubernetes集群运行命令的命令行界…

怎么通过微信小程序实现远程控制8路控制器/断路器

怎么通过微信小程序实现远程控制8路控制器/断路器呢? 本文描述了使用微信小程序调用HTTP接口,实现控制8路控制器/断路器,支持8路输出,均可独立控制,可接入各种电器。 可选用产品:可根据实际场景需求&#…

DS:顺序表、单链表的相关OJ题训练(2)

欢迎各位来到 Harper.Lee 的学习世界! 博主主页传送门:Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦! 一、力扣--141. 环形链表 题目描述:给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个…

提升网络性能,解决网络故障,了解AnaTraf网络流量分析仪

在当今数字化时代,网络性能监测与诊断(Network Performance Monitoring and Diagnosis,NPMD)成为了企业和个人关注的焦点。随着网络流量不断增长,确保网络的稳定性和高效性变得更加重要。在这个领域,AnaTraf网络流量分析仪是您不可或缺的得力…

从“金事通”带给我意想不到的来说--“数据是架构的中心”

背景 上周一个保险的销售人员来找我完成一定的售后流程。其中有一项是请我下载一个叫 金事通的 APP。说实在的我根本没听过。她说这是政治任务。我想不是有你们保险公司的APP了嘛。为什么还要我安装。没办法先安装吧。 经历了注册、人脸识别的步骤后。可以登录了。注册短信发…

使用Docker+Jar方式部署微服务工程(前后端分离)看着一篇就够了

本篇教程的使用到的技术有springboot、springcloud、Nacos、Docker、Nginx部署前后端分离访问的微服务。 部署一下Nacos 首先我们需要在服务器中(或者本地部署启动一下Nacos),这里我采用服务器的方式进行部署,这里有一点不一样的…

前端开发者必备:Nginx入门实战宝典,从部署到优化一网打尽

🔥 个人主页:空白诗 文章目录 引言 👋一、Nginx简介 📚二、常见的Web服务器架构 🌀📌 架构概述📌 Nginx的深入探讨 三、正向代理与反向代理 🔮📌 正向代理工作原理&#…

Leecode热题100---1:两数之和

题目&#xff1a;从nums中找出两个元素&#xff0c;它们的和等于target&#xff0c;返回下标。 C&#xff1a; 1、直接暴力法 写嵌套循环&#xff0c;让每一个元素和其他元素分别相加&#xff0c;判断和是否等于target&#xff0c;等于就返回下标。 #include <iostream>…

RabbitMQ(四种使用模式)

文章目录 1.Fanout&#xff08;广播模式&#xff09;1.基本介绍2.需求分析3.具体实现1.编写配置类 RabbitMQConfig.java2.编写生产者&#xff0c;发送消息到交换机 MQSender.java3.编写消费者&#xff0c;接受消息 MQReceiver.java4.控制层调用方法&#xff0c;发送信息到交换机…

git error index file corrupt

错误提示&#xff1a; error: bad signature 0x00000000 fatal: index file corrupt 场景复现&#xff1a;在使用git add .提交代码到缓冲区时电脑宕机&#xff0c;重启后再次提交代码会出现该提示 原因分析&#xff1a;.git目录下的index文件损坏 解决方式&#xff1a; 删…

工程师工具箱系列(3)Arthas

文章目录 工程师工具箱系列&#xff08;3&#xff09;Arthas安装与准备Arthas插件使用场景查看某个变量值ognl方式调用Bean方法tt(TimeTunel)方式调用Bean的方法ognl调用带参数方法 资源总览 工程师工具箱系列&#xff08;3&#xff09;Arthas Java诊断利器 安装与准备 window…

LabVIEW学习记录3 - 自定义函数

LabVIEW学习记录3 - 自定义函数 一、LabVIEW学习记录二、自定义函数及函数调用 一、LabVIEW学习记录 【labVIEW】学习记录LabVIEW学习记录2 - MySQL数据库连接与操作LabVIEW学习记录 - 实时显示时间LabVIEW学习记录4-局部变量、全局变量、共享变量 二、自定义函数及函数调用 …

C++入门-stack和queue(下)

大家好啊&#xff0c;在这先祝天下的母亲节日快乐啦&#xff01;现在呢&#xff0c;给大家带来C中priority_queue和容器适配器的相关知识点 3.1 C 中的优先队列&#xff08;priority_queue&#xff09;介绍 优先队列&#xff08;priority_queue&#xff09;是一种特殊的队列…

洛谷 P6218 [USACO06NOV] Round Numbers S 题解 数位dp

[USACO06NOV] Round Numbers S 题目描述 如果一个正整数的二进制表示中&#xff0c; 0 0 0 的数目不小于 1 1 1 的数目&#xff0c;那么它就被称为「圆数」。 例如&#xff0c; 9 9 9 的二进制表示为 1001 1001 1001&#xff0c;其中有 2 2 2 个 0 0 0 与 2 2 2 个 1 …