python数据类型可变与不可变深入分析

Python数据类型可变与不可变深入分析

在 Python 中,每一个对象都有其类型,一个变量的数据类型即为所存储对象的类型。Python 中的数据类型可以分为可变和不可变两种类型,本篇文章将深入分析这两种数据类型的区别。

可变数据类型

可变数据类型是指数据类型中的元素可被修改。Python 中的可变数据类型有 listdictsetbytearray 等。

举例来说,我们先声明一个列表 lst

lst = [1, 2, 3, 4, 5]

列表中的元素可以通过索引进行修改:

lst[0] = 6
print(lst) #[6, 2, 3, 4, 5]

再看一个字典 dict

dict_1 = {'name' : 'Alice', 'age' : 22}

字典中的元素可通过键进行修改:

dict_1['name'] = 'Bob'
print(dict_1) #{'name': 'Bob', 'age': 22}

不可变数据类型

不可变数据类型是指数据类型中的元素不可被修改。Python 中的不可变数据类型有 intfloatstrtupleboolfrozenset 等。

我们先声明一个字符串 str1

str1 = 'hello'

字符串中的元素不可被修改:

str1[0] = 'H' # TypeError: 'str' object does not support item assignment

再看一个元组 tuple

tuple_1 = (1, 2, 3)

元组中的元素也不可被修改:

tuple_1[0] = 4 # TypeError: 'tuple' object does not support item assignment

可变数据类型和不可变数据类型的区别

从上面的例子中,我们可以看出主要区别在于在进行修改后,原对象内存地址的变化。

不可变类型,在修改值的时候会开辟一个新的空间,来存放新的值,不会对原来的空间产生影响,返回的是一个新的地址。下面是一个例子,我们先将字符串str1 变量的内存地址打印出来:

str1 = 'hello'
print(id(str1)) #140460445576496

然后进行修改:

str1 += ', world'
print(str1) #hello, world
print(id(str1)) #140460445577200

我们再次打印出 str1 的内存地址,可以发现与之前相差了704。因为在上一个位置的空间中已经没有 str1, world,该字符串已经被分配了一个新空间。

可变类型,修改一个元素,它的内存地址不会发生变化。下面是一个例子:

lst_2 = [1, 2, [3, 4], 5]
lst_2[2][0] = 7
print(lst_2) #[1, 2, [7, 4], 5]

我们看到,在修改列表中嵌套列表的时候,该嵌套列表在原址修改。这是因为开辟新的空间需要更多的时间,我们希望能够在一个原址中完成就可以了。

综上所述,我们了解了 Python 中的可变和不可变数据类型的区别,掌握这种差异有助于编写出更高效的代码

示例1

这是一个修改列表的例子:

lst = [1, 2, 3, 4, 5]

id_org = id(lst)

lst[0] = 6

id_new = id(lst)

print(id_org, id_new)

运行结果如下:

4355091328 4355091328

我们可以看出在列表的某一元素进行修改,其原地址是不变的。

示例2

这是一个修改字符串的例子:

str1 = 'hello'

id_org = id(str1)

str1 += ', world'

id_new = id(str1)

print(id_org, id_new)

运行结果如下:

4566203248 4566203440

我们可以看到在字符串的某一元素进行修改,其原地址是变化的,是开辟了新的内存空间。

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

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

相关文章

  • python循环之彩色圆环实现示例

    下面是“Python循环之彩色圆环实现示例”的完整攻略。 Python循环之彩色圆环实现示例 1. 简介 在这个示例中,我们将用Python的turtle模块,使用循环语句实现彩色圆环的绘制。这个示例可以帮助我们熟悉Python中turtle模块的使用,以及掌握循环语句的使用方法,同时还可以让我们学习如何定义函数和使用列表等基础数据结构。 2. 前置知识 在…

    python 2023年5月13日
    00
  • python连接clickhouse数据库的两种方式小结

    Python连接ClickHouse数据库的两种方式小结 ClickHouse是一款快速、高效的列式数据库,它的速度比其他数据库要快得多。对于需要处理大量数据的场景而言,ClickHouse具有不可替代的优势。 本文将介绍两种Python连接ClickHouse数据库的方式。 方式一:使用clickhouse-driver模块 clickhouse-driv…

    python 2023年6月3日
    00
  • 基于Python实现ComicReaper漫画自动爬取脚本过程解析

    下面是详细讲解“基于Python实现ComicReaper漫画自动爬取脚本过程解析”的攻略: 简介 ComicReaper是一款基于Python的漫画自动爬取脚本程序,它可以自动的下载指定网站的漫画,方便漫画爱好者们阅读漫画。 环境设置 在开始使用ComicReaper之前,我们需要先安装Python 3.x版本,并配置好电脑的环境变量。 安装依赖库 安装P…

    python 2023年5月14日
    00
  • 超详细注释之OpenCV制作图像Mask

    超详细注释之OpenCV制作图像Mask 什么是图像Mask? 在数字图像处理中,一个Mask(掩码)是一张二进制图像(黑白图像),它用来指示图像的某些部分是否需要被处理。 图像Mask是一种非常常见的图像处理技术,它可以使得我们只对图像的感兴趣区域进行处理,而不必关心整张图像的所有像素值。 制作图像Mask的步骤 首先,我们需要载入图像,然后选择感兴趣区域…

    python 2023年6月2日
    00
  • 用Python自动发邮件提醒你周末吃啥

    用Python自动发邮件提醒你周末吃啥 在本攻略中,我们将介绍如何使用Python自动发邮件提醒你周末吃啥,并提供一些示例。 步骤1:设置邮箱 在使用Python自动发邮件之前,我们需要先设置邮箱。我们可以使用Python的smtplib库设置邮箱。 以下是一个示例,用于设置邮箱: import smtplib # 设置邮箱 smtp_server = ‘s…

    python 2023年5月15日
    00
  • Python永久配置国内镜像源安装再也不用担心卡顿

    好的。作为Python爱好者和网站作者,我很乐意为您提供Python永久配置国内镜像源安装的完整攻略。在这篇攻略中,我们将介绍如何使用国内的镜像源加速Python的安装,让您不再担心Python安装过程中的卡顿。 配置方法 第一步:备份原配置文件 在进行任何配置更改之前,请备份您的原始配置。这一步可以防止无法预料的错误和损失数据。执行以下操作来备份pip配置…

    python 2023年5月14日
    00
  • python matplotlib各种画图

    下面是关于Python Matplotlib的画图攻略。Matplotlib是一个非常强大而常用的Python绘图库。借助于它的多种图形和可视化工具,我们可以更好地理解和分析数据,促进不同数据之间的关系。 1. 安装Matplotlib库 Matplotlib库可在Linux、Mac OS X和Windows等平台上使用,可以通过以下方式安装: pip in…

    python 2023年5月19日
    00
  • python-docx如何缩进两个字符

    要让python-docx生成的Word文档内容缩进两个字符,可以使用Python字符串的缩进操作。 首先,我们需要安装python-docx库。可以使用pip命令进行安装: pip install python-docx 然后,我们可以使用python-docx库创建一个Word文档,并添加段落和文本内容: from docx import Documen…

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