python中的不可变数据类型与可变数据类型详解

Python中的不可变数据类型与可变数据类型详解

Python中的数据类型分为两类:不可变(Immutable)和可变(Mutable)。不可变类型的值在创建后不能修改,当尝试修改时,Python会创建一个新的对象并返回新对象引用,而不是修改原对象。而可变类型的值是可以修改的,原对象的引用不会变。

以下是常见的Python中的不可变数据类型和可变数据类型:

不可变数据类型

整型(int)

整型是最常见的不可变数据类型。整型在Python中表示整数,例如:

x = 5

上面的代码创建了一个整型变量,并将值赋为5。如果我们尝试修改它:

x = 10

这并不是修改了整数变量的值,而是创建了一个新的整型变量,其值为10,并将这个新的引用赋值给x。原始的整数变量被保留在内存中。

字符串(str)

字符串也是不可变的。字符串一旦被创建,它的值就不能被更改。例如:

s = 'hello'

我们可以对字符串进行索引操作,但不能更改它:

print(s[0])  # Output: 'h'
s[0] = 'a'   # TypeError: 'str' object does not support item assignment

Python会抛出TypeError异常,因为字符串是不可变的。如果我们想要改变字符串,我们需要创建一个新的字符串对象。

元组(tuple)

元组也是不可变的。一旦创建了元组,就不能修改它的值或者元素。例如:

t = (1, 2, 3)

元组的元素可以通过索引访问,但不能更改它们的值:

print(t[0])  # Output: 1
t[0] = 4    # TypeError: 'tuple' object does not support item assignment

不可变集合(frozenset)

不可变集合(frozenset)同样是不可变的,一旦创建就不能修改。例如:

fs = frozenset([1, 2, 3])

我们可以通过索引操作访问不可变集合的元素,但不能进行修改:

print(fs[0])  # Output: TypeError: 'frozenset' object does not support indexing
fs.add(4)     # AttributeError: 'frozenset' object has no attribute 'add'

尝试对不可变集合进行修改会抛出类似TypeError和AttributeError的错误。

可变数据类型

列表(list)

列表(list)是最常见的可变数据类型之一。与不可变类型不同的是,列表的值可以进行修改。例如:

lst = [1, 2, 3]

我们可以使用索引来访问列表的值,也可以使用索引来修改它们:

print(lst[0])  # Output: 1
lst[0] = 4
print(lst)     # Output: [4, 2, 3]

字典(dict)

字典(dict)也是一种可变类型,可以添加、修改或删除其中的键值对。例如:

dict = {'a': 1, 'b': 2}

在字典中,我们可以使用键来查找和更改值:

print(dict['a'])  # Output: 1
dict['a'] = 3
print(dict)       # Output: {'a': 3, 'b': 2}

总结

不可变类型的值在创建后就不能被更改,而可变类型的值是可以修改的。在编写程序时,需要根据需要选择适当的数据类型,并注意如何将它们传递给函数和修改其中的值。

在Python中,不可变数据类型包括int、str、tuple和frozenset;可变数据类型包括list和dict。

示例:

# Example1 - 可变类型
lst = [1, 2, 3]
def func(list):
   list[0] = 4
func(lst)
print(lst)   # Output: [4, 2, 3]

# Example2 - 不可变类型
a = 5
b = a
a += 2
print(b)    # Output: 5

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python中的不可变数据类型与可变数据类型详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python实现八大排序算法(2)

    Python实现八大排序算法(2) 在本文中,我们将继续讲解Python实现八大排序算法的内容,包括选择排序、插入排序、希尔排序、并排序、快速排序、堆、计数排序桶排序。 选择排序 选择排序是一种简单的排序算法,它的基本思想是每次从未排序的元素中选择最小的元素,放到已排序的尾。选择排序的时间复杂度为(n^2)。 下面Python实现选择排序的代码: def s…

    python 2023年5月13日
    00
  • 详谈python http长连接客户端

    HTTP长连接是一种在单个TCP连接上进行多次HTTP请求和响应的技术。它可以帮助我们更高效地进行HTTP通信和数据交换。在Python中,我们可以使用requests库来实现HTTP长连接客户端。本文将通过实例讲解如何使用Python实现HTTP长连接客户端,包括安装和使用requests库,以及两个示例。 安装requests库 在使用requests库…

    python 2023年5月15日
    00
  • 聊聊python在linux下与windows下导入模块的区别说明

    针对“聊聊Python在Linux下与Windows下导入模块的区别说明”,我们可以从以下几个方面来进行讲解。 1. 文件路径表示方式的差异 相信我们都知道,不同的操作系统会有不同的文件路径表示方式。在Linux系统中,文件路径的表示方式是以/为分隔符,例如:/home/user/project;而在Windows系统中,则是以\为分隔符,例如:C:\Use…

    python 2023年6月2日
    00
  • python机器学习之神经网络(二)

    对于“python机器学习之神经网络(二)”,完整攻略如下: Python机器学习之神经网络(二) 神经网络详解 神经网络是一种人工智能技术,基于神经元的连接方式,可以进行各种各样的模型训练,比如分类、回归等,而且在图像识别、自然语言处理等领域也得到了广泛的应用。在神经网络中,我们常用的模型有单层神经网络、多层神经网络和卷积神经网络。 神经网络的模型大致可以…

    python 2023年5月23日
    00
  • Python中用altzone()方法处理时区的教程

    下面是我为你提供的Python中使用altzone()方法处理时区的攻略,内容如下: 什么是时区? 时区是一个地区用来参考同一时间的时间标准,这些标准通常是以格林威治时间为基础,确定了一些区域的标准时间。由于不同的地方有不同的夏令时规则、不同时改变时区或不同的历史时间偏移等原因,所以同一个时刻的本地时间在不同的时区可能并不相同。 Python中处理时区的常用…

    python 2023年6月2日
    00
  • python入门前的第一课 python怎样入门

    那么让我们来详细讲解一下“Python入门前的第一课:Python怎样入门”的完整攻略。 为什么选择Python 首先,我们需要明确为什么要选择Python作为编程语言。Python是一种脚本语言,非常易学易用,且能够在多个操作系统上运行。此外,Python也是一种高级语言,可以用于各种应用,如网络编程、数据科学、机器学习等等。 安装Python 接下来,我…

    python 2023年5月13日
    00
  • python为图片和PDF去水印详解

    Python为图片和PDF去水印详解 前言 在许多实际应用中,我们需要处理一些图片和PDF文件,并且这些文件可能包含着不必要的水印。因此,本文将介绍如何使用Python去除这些水印。 需要提醒的是,本文所介绍的所有方法仅用于学习和技术研究,务必遵守各种法律法规和伦理道德规范。 去除图片水印 1. 使用Pillow库 Pillow是Python中一个非常常用的…

    python 2023年6月3日
    00
  • 关于命令行执行Python脚本的传参方式

    关于命令行执行Python脚本的传参方式,一般有两种方式:使用sys模块和使用argparse模块。下面我将分别对这两种方式进行详细讲解。 使用sys模块 sys模块是Python标准库中的一个模块,提供了对Python解释器进行访问的一些函数和变量。其中,sys.argv是一个字符串列表,包含了命令行参数。具体步骤如下: 1.首先,在Python脚本文件中…

    python 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部