如何在Python中拷贝类对象到数组

在这里插入图片描述

1、问题背景
在Python中,我们经常需要存储多个对象的集合。有时,我们需要拷贝这些对象,以便在不修改原始对象的情况下对它们进行操作。例如,在下述代码中,我们在colors列表中存储了多个Color对象,然后我们创建一个新的列表tmp_colors来存储colors的副本。

class Color:def __init__(self, num, nodelist):self.num = numself.nodelist = nodelistdef funcA():nodeCount = 2colors = []for i in range(0, nodeCount):colors.append(Color(i, [i * 10, i * 10 + 1]))colors[0].num = 2colors[0].nodelist = [10,20]colors[1].num = 3colors[1].nodelist = [23,33, 43]tmp_colors = list(colors)tmp_colors[0].num = 2tmp_colors[0].nodelist = [10,21]print("colors")for i in range(0, nodeCount):print(colors[i].items())print("\ntmp_colors")for i in range(0, nodeCount):print(tmp_colors[i].items())

预期结果是tmp_colors和colors是独立的列表,修改tmp_colors不会影响colors。但是,运行代码后,我们发现tmp_colors[0]和colors[0]指向同一个对象,修改tmp_colors[0]也会修改colors[0]。

colors
[('num', 2), ('nodelist', [10, 20])]
[('num', 3), ('nodelist', [23, 33, 43])]tmp_colors
[('num', 2), ('nodelist', [10, 21])]
[('num', 3), ('nodelist', [23, 33, 43])]

2、解决方案
为了解决这个问题,我们需要创建一个Color对象的真正的副本。我们可以使用copy.deepcopy()函数来做到这一点。copy.deepcopy()函数将创建一个对象的新副本,该副本与原始对象完全独立。

import copytmp_colors = copy.deepcopy(colors)tmp_colors[0].num = 2
tmp_colors[0].nodelist = [10,21]print("colors")
for i in range(0, nodeCount):print(colors[i].items())print("\ntmp_colors")
for i in range(0, nodeCount):print(tmp_colors[i].items())

现在,tmp_colors和colors是独立的列表,修改tmp_colors不会影响colors。

colors
[('num', 2), ('nodelist', [10, 20])]
[('num', 3), ('nodelist', [23, 33, 43])]tmp_colors
[('num', 2), ('nodelist', [10, 21])]
[('num', 3), ('nodelist', [23, 33, 43])]

如果我们想以后更新colors[0],我们可以通过将tmp_colors[0]的值赋给colors[0]来实现。

colors[0] = tmp_colors[0]

代码示例:

class Color:def __init__(self, num, nodelist):self.num = numself.nodelist = nodelistdef funcA():nodeCount = 2colors = []for i in range(0, nodeCount):colors.append(Color(i, [i * 10, i * 10 + 1]))colors[0].num = 2colors[0].nodelist = [10,20]colors[1].num = 3colors[1].nodelist = [23,33, 43]tmp_colors = copy.deepcopy(colors)tmp_colors[0].num = 2tmp_colors[0].nodelist = [10,21]print("colors")for i in range(0, nodeCount):print(colors[i].items())print("\ntmp_colors")for i in range(0, nodeCount):print(tmp_colors[i].items())colors[0] = tmp_colors[0]print("\ncolors <<< have been changed")for i in range(0, nodeCount):print(colors[i].items())funcA()

结果:

colors
[('num', 2), ('nodelist', [10, 20])]
[('num', 3), ('nodelist', [23, 33, 43])]tmp_colors
[('num', 2), ('nodelist', [10, 21])]
[('num', 3), ('nodelist', [23, 33, 43])]colors <<< have been changed
[('num', 2), ('nodelist', [10, 21])]
[('num', 3), ('nodelist', [23, 33, 43])]

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

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

相关文章

Elasticsearch 8.x 存储有无压缩?能压缩到多少?

1、认知前提 Elasticsearch 支持压缩&#xff0c;压缩方式默认为&#xff1a;LZ4 压缩算法。 具体参见&#xff1a; The default value compresses stored data with LZ4 compression, but this can be set to best_compression which uses DEFLATE for a higher compression r…

拓扑学习系列(4)结实knots的亏格Genus与赛弗特曲面算法

结实knots的亏格 结实的亏格&#xff08;Genus&#xff09;是结实理论中一个重要概念&#xff0c;用于描述结实的复杂性。亏格是一个非负整数&#xff0c;与结实所界定的曲面的拓扑性质相关。以下是对结实的亏格的解释和定义&#xff1a; 定义&#xff1a; 结实的亏格是指结实…

asp如何采集网页

在ASP中采集数据通常意味着通过服务器端脚本从其他网站或API获取数据。以下是一个简单的ASP脚本示例&#xff0c;它使用XMLHTTP对象从指定URL获取数据&#xff1a; <%初始化一个XMLHTTP对象 Set objXMLHTTP Server.CreateObject("MSXML2.XMLHTTP") 要采集的目标…

PyQt5事件机制解析:从原理到实战一网打尽!

PyQt5事件机制 一、简介1.1 PyQt5的概述和作用 1.2 为什么学习PyQt5事件机制1.2.1 实现用户交互1.2.2 处理复杂逻辑1.2.3 自定义用户界面行为1.2.4 优化性能 二、PyQt5事件机制初步了解2.1 PyQt5事件的概念和基本原理2.1.1 PyQt5事件的概念2.1.2 PyQt5事件的基本原理 2.2 事件处…

什么是数据挖掘(python)

文章目录 1.什么是数据挖掘2.为什么要做数据挖掘&#xff1f;3数据挖掘有什么用处&#xff1f;3.1分类问题3.2聚类问题3.3回归问题3.4关联问题 4.数据挖掘怎么做?4.1业务理解&#xff08;Business Understanding&#xff09;4.2数据理解&#xff08;Data Understanding&#x…

生态共建 | 华宇TAS应用中间件与新华三服务器完成兼容互认证

近日&#xff0c;华宇TAS应用中间件完成与新华三技术有限公司的R4930系列和R4970 G7服务器的兼容适配&#xff0c;认证测试报告显示&#xff0c;双方产品兼容性良好&#xff0c;运行稳定、安全&#xff0c;可以满足用户对双方功能的要求。 新华三技术有限公司 新华三技术有限公…

行业洞察 | 2024应用程序安全领域现状报告

在信息爆炸的时代&#xff0c;我们每天都在使用各种应用&#xff0c;从社交娱乐到工作学习&#xff0c;应用已经成为我们生活中不可或缺的一部分。然而&#xff0c;你是否知道&#xff0c;在这些便捷的背后&#xff0c;隐藏着巨大的安全风险&#xff1f; 近年来&#xff0c;应用…

2024年前端面试题及答案

7、 nginx代理跨域 8、 nodejs中间件代理跨域 9、 WebSocket协议跨域 前端数据加密问题 1 一般如何处理用户敏感信息&#xff1f; 前端一般使用md5、base64加密、sha1加密&#xff0c;想要了解详情请自行百度。 前端http相关问题 1 HTTP常用状态码及其含义&#xff1f; …

win10系统让当前用户拥有管理员权限

本方法应该也适用于win11 大家在安装系统的时候&#xff0c;如果开始你不重新建立一个账号。直接使用默认的administror登录&#xff0c;那么这个时候电脑只有1个账户&#xff0c;但是如果你在刚开始的时候建立了一个新的&#xff0c;比如你姓李 名字叫帅哥&#xff0c;那么这…

[ES6] 箭头函数

JavaScript 是一种广泛使用的编程语言&#xff0c;随着其发展和演变&#xff0c;引入了很多新的特性来提高代码的可读性和开发效率。其中一个重要的特性就是 ES6&#xff08;ECMAScript 2015&#xff09;中引入的箭头函数&#xff08;Arrow Function&#xff09;。箭头函数不仅…

css---before和after伪元素

1.什么是伪元素 伪元素不是真正的页面元素&#xff0c;html没有对应的元素&#xff0c;但是其所有用法和表现行为与真正的页面元素一样&#xff0c;可以对其使用如页面元素一样的CSS样式&#xff0c;表面上看上去貌似是页面的某些元素来展现&#xff0c;实际上CSS样式展现的行…

这样一位美丽的女子

在《生有热爱》这本书中看到这样一句话“斯人若彩虹&#xff0c;遇上方知有”&#xff0c;瞬间击中了我的灵魂&#xff0c;这句话完美的表达了我对爱人的情感。以前我总以为“遇上爱人是我这辈子最大的幸运”是我此生对爱人的完美表达&#xff0c;直到遇到这句话我才深刻体会到…

django models对应的mysql类型

Django模型字段类型与MySQL数据库类型的对应关系如下&#xff1a; Django 模型字段类型MySQL 数据库类型AutoFieldBIGINT UNSIGNEDCharFieldVARCHARIntegerFieldINTDecimalFieldDECIMALDateFieldDATEDateTimeFieldDATETIMEFileField, ImageFieldVARCHAR (用于文件路径)Boolean…

Python容器 之 字典--字典的遍历

字典存在 键(key), 值(value) , 遍历分为三种情况 1.遍历字典的键 循环拿到字典中的每个键名 # 方式一 for 变量 in 字典: print(变量) # 方式二 for 变量 in 字典.keys(): # 字典.keys() 可以获取字典所有的键 print(变量) my_dict {name: 小明, age: 18, sex: 男}…

Node.js的应用场景

Node.js具有广泛的应用场景&#xff0c;其基于Chrome V8引擎的JavaScript运行环境使得JavaScript能够运行在服务器端&#xff0c;极大地扩展了其应用范围。以下是Node.js的主要应用场景&#xff1a; 1. 服务器端开发 Web服务器和API服务器&#xff1a;Node.js非常适合构建服务…

Kamailio-Web管理页面Siremis的安装与部署

siremis 是针对于 Kamailio 的web管理接口&#xff0c;使用PHP书写&#xff0c;更新至2020年&#xff0c;相对不是太新但是是官方友链的 以下就采用 Ubuntu 22.04Siremis 5.8.0apache http server 2.4php7.0 如有疑问请参看官方指南 以下开始介绍操作步骤 安装apache2.4 we…

python转换其他分辨率的图片为固定分辨率的方法

**需求&#xff1a;**把其他分辨率转换成1920*960的分辨率&#xff0c;并保存下来 你可以使用Pillow库&#xff0c;这是一个非常流行的图像处理库。以下是一段示例代码&#xff0c;演示如何使用Pillow来调整图片的分辨率&#xff1a; from PIL import Imagedef resize_image(…

《艺术品交易导报》

《艺术品交易导报》 《艺术品交易导报》是由心海集团主管&#xff0c;北京心海文化艺术研究院主办的&#xff0c;鉴于国家的扶持政策和艺术品交易中心的崛起&#xff0c;为推动艺术品交易走向更加成熟和规范化道路而做的一份艺术品交易领域的专业报刊。在追求艺术品价值的同时…

学习一个新的知识点的五个状态

# 学习一个新的知识点的五个状态是&#xff1a; # 未知&#xff0c;接触&#xff0c;熟悉&#xff0c;模仿&#xff0c;创造。# 其中 接触 熟悉 模仿 是我们学习要经历的状态。 # 接触&#xff0c;主要是了解名称&#xff0c;有什么功能 # 熟悉&#xff0c;就是有功能如何使用…

【Qt项目学习--使用QTcpserver和libssh的区别】

很多Qt的教程都是基于QTcpServer实现的服务器客户端架构&#xff0c;而我想实现的用户名密码登陆&#xff0c;跟下来教程视频发现并没有实现&#xff0c;于是去了解libssh&#xff0c;实现IP地址登陆之后使用用户名密码实现。 libssh和QTcpServer之间的主要不同点&#xff1a;…