python中的可变与不变的物体 - 分析vidhya
介绍
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工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

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

热门文章

热工具

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

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

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

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Meta的Llama 3.2:多模式和移动AI的飞跃 Meta最近公布了Llama 3.2,这是AI的重大进步,具有强大的视觉功能和针对移动设备优化的轻量级文本模型。 以成功为基础

嘿,编码忍者!您当天计划哪些与编码有关的任务?在您进一步研究此博客之前,我希望您考虑所有与编码相关的困境,这是将其列出的。 完毕? - 让&#8217

本周的AI景观:进步,道德考虑和监管辩论的旋风。 OpenAI,Google,Meta和Microsoft等主要参与者已经释放了一系列更新,从开创性的新车型到LE的关键转变

Shopify首席执行官TobiLütke最近的备忘录大胆地宣布AI对每位员工的基本期望是公司内部的重大文化转变。 这不是短暂的趋势。这是整合到P中的新操作范式

介绍 想象一下,穿过美术馆,周围是生动的绘画和雕塑。现在,如果您可以向每一部分提出一个问题并获得有意义的答案,该怎么办?您可能会问:“您在讲什么故事?

介绍 Openai已根据备受期待的“草莓”建筑发布了其新模型。这种称为O1的创新模型增强了推理能力,使其可以通过问题进行思考

斯坦福大学以人为本人工智能研究所发布的《2025年人工智能指数报告》对正在进行的人工智能革命进行了很好的概述。让我们用四个简单的概念来解读它:认知(了解正在发生的事情)、欣赏(看到好处)、接纳(面对挑战)和责任(弄清我们的责任)。 认知:人工智能无处不在,并且发展迅速 我们需要敏锐地意识到人工智能发展和传播的速度有多快。人工智能系统正在不断改进,在数学和复杂思维测试中取得了优异的成绩,而就在一年前,它们还在这些测试中惨败。想象一下,人工智能解决复杂的编码问题或研究生水平的科学问题——自2023年

Meta's Llama 3.2:多式联运AI强力 Meta的最新多模式模型Llama 3.2代表了AI的重大进步,具有增强的语言理解力,提高的准确性和出色的文本生成能力。 它的能力t
