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


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

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

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

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

  • 可变对象

  • 不可变对象。

总而言之,可变对象可以更改其状态或内容,而不可变对象则不能。

不可变数据类型

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

  • 整数 (Int)

  • 浮点数 (Float)

  • 元组 (Tuple)

  • 复数 (Complex)

  • 字符串 (String)

  • 冻结集 (Frozen 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

浮点数 (Float)

float 数据类型用于表示带小数点的值。

float 类表示此值。它是以浮点形式表示的实数。使用小数点来指定它。要表示科学记数法,可以在后面附加字符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'>

元组 (Tuple)

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

示例

# 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

我们使用一些随机值创建了一个元组,然后用另一个随机值更改了列表的元素,因为元组是不可变的数据类型,元素的值不会更改,并且会抛出异常。

复数 (Complex)

复数表示为实部+虚部<j>

示例

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

输出

<class 'complex'>

字符串 (String)

因为字符串是不可变的,所以我们不能在其中追加或更新任何内容。在修改字符串的任何部分时,我们遇到了表明字符串本质上不可变的问题。

示例

# 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

冻结集

冻结集与集合唯一的区别在于它是不可变的。这意味着在创建集合后,您无法更改它。

示例

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 不可变数据类型。我们还通过示例演示了它们是如何不可变的。

更新于: 2023年9月9日

14K+ 次查看

开启您的职业生涯

通过完成课程获得认证

立即开始
广告