Python 中什么是可变和不可变?

已发表: 2022-09-22

在 Python 中,每个变量都包含两种类型的任何对象的实例,即可变的和不可变的。 每当实例化一个对象时,都会为其分配一个唯一的对象 ID。 运行时定义对象类型,以后不能更改。

但是,可变对象是可变对象。 当我们说可变的时,它意味着内部对象状态可以改变。 同时,创建后无法改变的对象状态是不可变对象。 可变和不可变状态都是 Python 数据结构的组成部分。

Python 中对象可变性的特性使其成为一种动态类型语言。 Python 中的 Mutable 和 Immutable 作为一个概念是非常重要的,但由于它们的不变性的不传递性而经常被混淆。

让我们找出所有关于它们和主要区别的信息。

查看我们的数据科学在线课程,提升自己的技能

目录

学习提升技能的顶级数据科学技能

SL。 2022 年最值得学习的数据科学技能
1 数据分析在线课程 推论统计在线课程
2 假设检验在线课程 逻辑回归在线课程
3 线性回归课程 线性代数分析在线课程

Python中的可变状态

“可变”一词直接翻译为“可变”或可以“变异”的东西。 它定义了一个对更改开放的对象,在 Python 中,“可变”与对象更改值的能力有关。 这些对象通常存储数据集合并包含内置类型列表、集合、字典和用户定义的类。

Python中的不可变定义状态

Python 中的不可变是指您无法随时间更改对象类型。 如果在 Python 中无法更改对象的值,则它被称为不可变对象。 一旦创建了不可变对象,其值将保持永久不变。 不可变的内置类型对象是数字、字符串、元组、冻结集和用户定义的类。

Python 中的对象

在深入研究 Python 中的可变性和不变性之前,让我们首先了解什么是对象。 在 Python 中,一切都被认为是一个对象,每个对象都具有三个属性:

  • 身份:这是指对象在计算机内存中的地址。
  • 类型:这是指制作的对象类型。 例如,整数、字符串、列表等。
  • Value :这是指对象存储的值。 例如,List=[5,6,7] 将存储数字 5、6 和 7。

即使对象的 ID 和类型在创建后不开放更改,但值对可变对象开放更改。

Python中的可变对象

可变对象是 Python 中可以变异或更改的对象。 代码更好地用于教授这些对象的实现。 因此,让我们看一些代码,并尝试更好地理解可变对象:

  • 用于制作包含水果名称的列表

水果= ['芒果','木瓜','橙子']

  • 用于打印水果列表中的元素,用逗号和空格分隔

水果中的水果:

打印(水果,结束=',')

输出[1]:芒果、木瓜、橙子

  • 用于以十六进制格式打印在内存地址中创建的对象位置

探索我们流行的数据科学在线课程

IIITB 数据科学高级管理研究生课程 商业决策数据科学专业证书课程 亚利桑那大学数据科学理学硕士
IIITB 数据科学高级证书课程 马里兰大学数据科学和商业分析专业证书课程 数据科学在线课程

打印(十六进制(ID(水果)))

输出[2]:0x1691d7de8c8

  • 将新水果添加到“水果”列表中

fruits.append('葡萄')

  • 用于打印列表“fruits”中存在的元素,以逗号和空格分隔

水果中的水果:

打印(水果,结束=',')

输出 [3]:芒果、木瓜、橙子、葡萄

  • 用于以十六进制格式打印在内存地址中创建的对象位置

打印(十六进制(ID(水果)))

输出[4]:0x1691d7de8c8

该示例显示对象的内部状态“fruits”可以通过向其添加一个水果“Grapes”来轻松更改。 但是,对象的内存地址保持不变,证明不需要创建新对象。 相反,同一个对象可以被改变或变异。 此示例显示具有引用变量名称“fruits”(列表类型)的对象是可变的。

Python 中的不可变对象

Python 中的不可变对象是其值不能更改的对象。 让我们按照一个简单的代码来更好地掌握什么是不可变对象以及它们是如何工作的。 代码如下: -

  • 用于创建包含月份英文名称的元组

月='一月','二月','三月','四月','五月','六月','七月','八月'

  • 用于打印元组月份的元素

打印(月)

输出[1]:('一月','二月','三月','四月','五月','六月','七月','八月')

  • 用于打印对象位置,在内存地址中以十六进制格式创建

打印(十六进制(id(月)))

输出[2]:0x1691cc35090

  • 重要的是要注意元组是不可变的。 因此,它们未能包含更多的新元素。 因此,您需要使用带有# + 运算符的元组合并来在元组“月”中添加一个新的虚构月份。

月 += 'Pythonuary'

  • 用于打印元组“月”的元素。

打印(月)

输出[3]:('一月','二月','三月','四月','五月','六月','七月','八月','Pythonuary')

  • 用于以十六进制格式打印在内存地址中创建的对象位置

打印(十六进制(id(月)))

输出[4]:0x1691cc8ad68

阅读我们热门的数据科学文章

数据科学职业道路:综合职业指南 数据科学职业发展:工作的未来就在这里 为什么数据科学很重要? 数据科学为企业带来价值的 8 种方式
数据科学对管理者的相关性 每个数据科学家都应该拥有的终极数据科学备忘单 成为数据科学家的 6 大理由
数据科学家生活中的一天:他们做什么? 神话破灭:数据科学不需要编码 商业智能与数据科学:有什么区别?

这个例子证明了变量名可以很容易地用于引用一个对象,一种由八个元素组成的元组。 但是,old & new tuple 的内存位置 ID 是不一样的。 因此,无法更改对象的内部状态“月”。 因此,Python 程序管理器在内存地址中创建了一个新对象。 此外,变量名“months”还引用了具有九个元素的新对象。 因此,证明元组,即引用变量名为“months”的对象,是一个不可变对象。

结论

可变对象主要用于允许任何未来的更新。 另一方面,不变性还为以网络为中心的各种敏感任务提供了许多有效和实际的应用,从而实现了并行处理。 不可变对象,密封值并确保没有线程调用数据的覆盖/更新。 它非常适合编写将来不需要更改的永久代码。

如果你是一名初出茅庐的程序员或数据科学爱好者,学习 Python 中的可变和不可变对象将证明有助于你选择这个领域作为你的职业。 了解这些的最好方法是在 upGrad 上注册数据科学的行政研究生课程

该课程是在专家教师的指导下创建的,提供有关热门话题的深入知识,为成千上万的学习者为面向未来的职业做好准备。

Q1。 Python中可变与不可变之间的显着区别是什么?

答案:在可变对象中创建后对象的状态或值可以修改 在不可变对象中创建后对象的状态或值不可以修改 可变对象不是线程安全的。 不可变对象是完全线程安全的可变类不是最终的。 在创建不可变对象之前,您必须使类成为最终类。

Q2。 在 Python 中,什么是可变数据类型和不可变数据类型?

答:Python 中的可变数据类型有列表、集合、字典和用户定义的类,不可变数据类型有 int、decimal、float、bool、tuple、string 和 range。

Q3。 Python中的列表是可变的吗?

答:在 Python 中,列表是具有易于修改的元素的可变数据类型。 此外,您可以替换单个元素,甚至在创建列表后更改元素的顺序。