Python中的哪些数据类型是不可变的

Python中的哪些数据类型是不可变的

在本文中,我们将解释Python中的不可变 数据类型 。

Python认为所有的东西都是一个 对象 .当我们实例化一个对象时,会为其分配一个唯一的ID。我们无法修改对象的类型,但可以更改其值。例如,如果我们将变量a设置为列表,我们无法将其更改为元组/字典,但可以修改该列表中的条目。

Python 中,有两种类型的对象。一方面,有些对象可以更改其内部状态(对象内的数据/内容),即可以使用预定义的函数或方法来更改它们。另一方面,有些对象不能更改其内部状态(对象内的数据/内容)。

在Python中,有两种类型的对象:

  • 可变对象

  • 不可变对象

总结一下区别:可变的对象可以更改其状态或内容,但不可变的对象不能。

不可变数据类型

不可变数据类型是对象,在创建后无法被修改或更改(例如,添加新元素,删除元素或替换元素)。Python的不可变数据类型包括:

  • Int(整数)

  • Float(浮点数)

  • Tuple(元组)

  • Complex(复数)

  • String(字符串)

  • Stringfrozen set(注意:集合的不可变版本)

  • Bytes(字节)

当对不可变对象进行更改时,初始化时存储它们的内存将被更新。

Int(整数)

在计算机编程中, 整数 是可以是 正数、负数0 (…, -1, 0, 1, …) 的整数。整数也称为 int

与其他编程语言一样,不应在四位数或更高位数的数字中使用逗号,因此在您的代码中将1,000写作1000。

  • int − 有符号整数

  • long − 用于表示更大值的长整数

示例

以简单的方式打印整数,如下所示:

print(10)
print(-5)
# performing math operations with integers
sum_int = 20+30
print(sum_int)

输出

在执行后,上述程序将生成以下输出 –

10
-5
50

在Python应用程序中, 整数 可以以多种方式使用,在学习更多关于这种数据类型的知识时,您将有许多机会使用整数并学习更多关于它的知识。

由于 int 数据类型是不可变的,我们无法修改或更新它。

如前所述,不可变对象在更新时会改变它们的内存地址。

示例

# input number
inputNumber = 5
# printing the memory address of the int variable
print('Before updating, memory address = ', id(inputNumber))
# here we are updating an int object by assigning a new value to it.
# changing the same input number variable by assigning a new value to it
inputNumber = 10
# printing the memory address of the int variable after updating using the id() function
print('After updating, memory address = ', id(inputNumber))

输出

执行上述程序后,将生成以下输出 –

Before updating, memory address = 140103023683616
After updating, memory address = 140103023683776

浮点数

浮点数据类型用于表示带有小数点的值。 其浮点类 表示此值。它是以浮点形式表示的实数。用小数点来指定。为了表示科学计数法,可以在其后附加字符 eE , 后跟一个正或负数。

同样,更新后, float 数据类型也会更改其内存地址值。

示例

# printing the type of input numbers
number_1 = 4.5
print("Type of 4.5:", type(number_1))
number_2 = -0.05
print("Type of -0.05:", type(number_2))
number_3 = 3.04e20
print("number_3: ", number_3)
print("Type of 3.04e20:", type(number_3))

输出

在执行时,上述程序将生成以下输出 –

Type of 4.5: <class 'float'>
Type of -0.05: <class 'float'>
number_3: 3.04e+20
Type of 3.04e20: <class 'float'>

尾随的小数点用于确保变量是浮点数而不是整数,即使它是一个整数。请注意,当小数点跟随一个整数时的差异 –

例子

# printing the type of input numbers
number_1 = 10
print("Type of 10:", type(number_1))
number_2 = 8.
print("Type of 8. :", type(number_2))

输出

执行上述程序后,将会生成以下输出-

Type of 10: <class 'int'>
Type of 8. : <class 'float'>

元组

元组同样是不可变的,这意味着我们无法向其中添加或更新任何内容。在修改元组中的任何项时,我们会出现“元组”对象不支持项分配的错误。

示例

# input tuple
inputTuple = ('hello', 'tutorialspoint', 'python')
# printing the original input tuple
print("The original input tuple:", inputTuple)
# modifying the tuple element at index 2 using indexing
inputTuple[2]= 'welcome'
# printing input tuple after modifying
print("Input tuple after modification:", inputTuple)

输出

在执行上面的程序后,将生成以下输出:

The original input tuple: ('hello', 'tutorialspoint', 'python')
Traceback (most recent call last):
  File "main.py", line 6, in <module>
    inputTuple[2]= 'welcome'
TypeError: 'tuple' object does not support item assignment

我们取了一个带有一些随机值的元组,然后将列表中的元素改为另一个随机值,因为元组是不可变数据类型,元素的值没有改变,并且抛出了异常。

复数

复数表示为 **realpart+imaginarypart 。 **

例子

inputNumber = 1+2j
print(type(inputNumber))

输出

<class 'complex'>

字符串

由于字符串是 不可变的 ,我们无法添加或更新其中的任何内容。在修改字符串的任何部分时,我们遇到了表明字符串不可变性的问题。

示例

# input string
inputString = 'Welcome to tutorialspoint python'
# changing the string character at index 1
inputString[1] = 'a'
print(inputString)

输出

Traceback (most recent call last):
  File "main.py", line 4, in <module>
    inputString[1] = 'a'
TypeError: 'str' object does not support item assignment

frozenset

唯一的区别在于 frozenset 和集合的不可变性。这意味着创建后无法更改集合。

示例

frozen_set = frozenset(("hello", "tutoraialspoint", "python"))
# adding new item to frozen_set
# we cannot modify it as the frozenset is immutable
frozen_set.add("codes")

输出

Traceback (most recent call last):
  File "main.py", line 4, in <module>
frozen_set.add("codes")
AttributeError: 'frozenset' object has no attribute 'add'

结论

在本文中,我们了解了Python的不可变数据类型。我们还通过一个示例演示了它们的不可变性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程