介绍
Python是一种面向对象的编程语言(或OOPS)。在我的上一篇文章中,我们探索了它的多功能性。因此,Python提供了多种数据类型,可以将其大致分为可变且不变的类型。但是,作为一个好奇的Python开发人员,我希望您也想知道这些概念如何影响数据。如何在内存中处理和操纵数据?它如何影响该计划的质量?本文将为Python中的可变与不变对象提供全面的概述,以及为什么它们对于有效的编程至关重要。我们将探讨如何在不同的python对象上进行可突变性和不变性,例如整数,浮点,字符串等诸如原始数据类型以及内置的数据类型,例如列表,词典,集合,元组等。
目录
- 什么是突变性与不变性?
- Python中有什么可变的与不变的物体?
- Python数据类型的比较分析
- 在内存级别会发生什么?
- 对象的删除如何工作?
- 如何确定程序的性能?
- 常见问题
什么是突变性与不变性?
从高级的角度来看,Mustability是指创建后要修改,更改或更新的任何对象的能力。这意味着,如果一个对象是可变的,则可以在不创建新对象的情况下更改其状态或内容。
另一方面,不变性意味着一旦创建对象,就无法更改/修改/更新其状态。对这些对象的任何更改都会创建一个具有不同内存分配的新对象,而不是更改现有对象。
Python中有什么可变的与不变的物体?
下图显示,Python的丰富数据类型可以分为两类:可变和不可变的对象,然后将其进一步划分。
Python数据类型的比较分析
让我们看看所有内置数据类型之间的比较:
数据类型 | 可变/不变 | 描述 | 用例 |
整数 | 不变 | 整数(例如,1,-5,42)。 | 使用不更改的数值数据时使用。 |
浮子 | 不变 | 具有小数点的数字(例如3.14,-0.001)。 | 对于科学计算,财务数据等有用。 |
布尔人 | 不变 | 逻辑值:真或错误。 | 条件检查,逻辑操作。 |
字符串 | 不变 | 字符序列(例如,“ Hello”,“ World”)。 | 用于文本操作,文档处理等。 |
元组 | 不变 | 订购项目的收集(例如(1,2,3))。 | 适用于恒定数据,可以用作字典键。 |
冷冻套装 | 不变 | 无序的独特物品集合,一个不变的版本。 | 在该集合需要恒定且可悬浮的情况下使用。 |
复杂数字 | 不变 | 具有真实和虚部的数字(例如1 2J)。 | 用于科学计算,信号处理等。 |
列表 | 可变 | 有序收集项目(例如[1,2,3])。 | 当您需要修改,添加或删除元素时,请使用。 |
字典 | 可变 | 钥匙值对的集合(例如,{“名称”:“ John”,“ Age”:30})。 | 映射关系,查找和数据存储的理想选择。 |
套 | 可变 | 唯一项目的无序集合(例如{1,2,3})。 | 最好用于会员测试,删除重复项等。 |
自定义对象(类) | 可变/不变 | 行为取决于类的定义方式(默认情况下可变)。 | 根据要求量身定制的行为;可以控制突变性。 |
要以更柔和的方式理解这些概念,请仔细研究这些概念 -
- 原始数据类型是“不变的” -链接
- Python内置数据结构是“可变的” -链接
在这些文章中,我讨论了这些数据型, “ ID”功能,浅层和深拷贝等的可突出性和不变性,以及代码。
注意:但是,我建议在阅读本文后仅检查这些代码。本文增强了您对“内存空间内会发生什么?”的理解。
在内存级别会发生什么?
在讨论内存级别的不变性时,无法直接更改一个不变的对象。任何似乎修改不变对象的操作都会在内存中创建具有修改值的新对象。可变对象共享先前分配的相同内存。这些对象的更改发生在适当的位置,修改现有内存内容而无需新的分配。
在进一步探索之前,让我们首先了解有关从内存删除对象的两个最常见的概念。
- DealLocation意味着系统释放并提供其他用途,以使用对象先前占用的内存。
- 垃圾收集是Python中的一个过程,它会自动找到并释放程序不再使用的内存,尤其是对于在周期中相互引用的对象。
对象的删除如何工作?
Python的内存管理依赖于两个主要因素,即参考计数和垃圾收集器,以处理对象的删除。让我们一个人了解它们:
- 参考计数: Python跟踪指向每个对象的引用数量。这称为参考计数。
- 循环参考-垃圾收集: Python还有一个处理环状引用的垃圾收集器。有时,对象在循环中互相引用。当参考计数降至零时,对象占据的内存将被划分。例如,对象A引用对象B和对象B引用对象A。即使程序的其他部分不需要这些对象,它们的参考计数也永远不会降至零,因为它们相互引用。这是垃圾收集器介入的地方。
如何确定程序的性能?
就性能的影响而言,可突变性和不变性具有显着差异。不变的数据类型通常更快地访问和处理。 Python可以通过重复不变的对象来优化内存使用量,主要是在程序中使用小整数和字符串。
可变的数据类型更灵活,但由于需要调整动态内存空间的需要,因此可以产生更多的开销。例如,python中的列表是动态数组,因为它们以一种使它们在执行操作(例如添加或删除元素)时的大小增长和缩小的方式存储。
结论
总之,了解可变物体和不变对象之间的差异对于在Python中编写有效和可靠的代码至关重要。例如,不变性提供了安全性不应更改的安全性,例如在键值映射或并发编程中。
相反,在程序的该特定部分需要动态更新数据结构的情况下,Mustability在情况下是有帮助的。知道何时使用对理解绩效和复杂性权衡的必不可少的东西,最终导致编写可维护的程序。
另请阅读:Python内置数据结构的综合指南
常见问题
Q1。 Python中可变的与不变的物体之间有什么区别?答:像列表或词典一样,可变的对象具有创建后就地修改的灵活性。同时,在同一内存分配中创建后,不变的对象(例如元组或字符串)无法更改。
Q2。为什么在Python中不可变的字符串?答:字符串是不变的,可以优化内存使用情况并允许在不同程序零件上进行安全共享。这减少了常用字符串的内存使用量,并简化了有关在多线程环境中弦乐处理的推理。
Q3。不变性如何影响Python的性能?答:不变的对象可以导致更快的性能,因为它们在内存中易于管理。 Python可以重复使用不变的对象,从而降低反复创建新对象的开销。这增加了对内存管理优势的见解。
以上是python中的可变与不变的物体 - 分析vidhya的详细内容。更多信息请关注PHP中文网其他相关文章!

网络攻击正在发展。 通用网络钓鱼电子邮件的日子已经一去不复返了。 网络犯罪的未来是超个性化的,利用了容易获得的在线数据和AI来制作高度针对性的攻击。 想象一个知道您的工作的骗子

新当选的教皇狮子座(Leo Xiv)在对红衣主教学院的就职演讲中,讨论了他的同名人物教皇里奥XIII的影响,他的教皇(1878-1903)与汽车和汽车和汽车公司的黎明相吻合

本教程演示了如何使用模型上下文协议(MCP)和FastAPI将大型语言模型(LLM)与外部工具集成在一起。 我们将使用FastAPI构建一个简单的Web应用程序,并将其转换为MCP服务器,使您的L

探索DIA-1.6B:由两个本科生开发的开创性的文本对语音模型,零资金! 这个16亿个参数模型产生了非常现实的语音,包括诸如笑声和打喷嚏之类的非语言提示。本文指南

我完全同意。 我的成功与导师的指导密不可分。 他们的见解,尤其是关于业务管理,构成了我的信念和实践的基石。 这种经验强调了我对导师的承诺

AI 增强型矿业设备 矿业作业环境恶劣且危险重重。人工智能系统通过将人类从最危险的环境中移除并增强人类能力,帮助提高整体效率和安全性。人工智能越来越多地用于为矿业作业中使用的自动驾驶卡车、钻机和装载机提供动力。 这些 AI 驱动的车辆能够在危险环境中精确作业,从而提高安全性和生产力。一些公司已经开发出用于大型矿业作业的自动驾驶采矿车辆。 在挑战性环境中运行的设备需要持续维护。然而,维护会使关键设备离线并消耗资源。更精确的维护意味着昂贵且必要的设备的正常运行时间增加以及显着的成本节约。 AI 驱动

Salesforce首席执行官Marc Benioff预测了由AI代理商驱动的巨大的工作场所革命,这是Salesforce及其客户群中已经进行的转型。 他设想从传统市场转变为一个较大的市场,重点是

人力资源中AI的崛起:与机器人同事一起导航劳动力 将人工智能集成到人力资源(HR)不再是未来派的概念。它正在迅速成为新现实。 这种转变影响了人力资源专业人员和员工,DEM


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript开发工具