百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

你知道吗,python编程中,有哪些数据类型是不可变的?

myzbx 2025-06-23 20:56 56 浏览

在 Python 中,不可变数据类型是指对象一旦创建后,其值或内容不能被修改。若尝试修改,Python 会创建一个新对象。以下是不可变数据类型的详细分类及验证方法:

一、不可变数据类型清单

1. 整数(int)

o 修改操作会生成新对象:

python

     x = 5
     print(id(x))  # 输出地址1
     x += 1        # 创建新对象6,原对象5不变
     print(id(x))  # 输出地址2(与地址1不同)<x-preset class="no-tts reference-tag disable-to-doc" data-index="1">1</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="3">3</x-preset>
     


2. 浮点数(float)

o 与整数类似,运算后生成新对象:

python

     a = 3.14
     a += 0.1      # 生成新对象3.24,原对象未变<x-preset class="no-tts reference-tag disable-to-doc" data-index="1">1</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="3">3</x-preset>
     


3. 字符串(str)

o 不可原地修改字符,需创建新字符串:

python

     s = "hello"
     # s<x-preset class="no-tts reference-tag disable-to-doc" data-index="0">0</x-preset> = 'H'  # 报错:TypeError
     s = 'H' + s[1:]  # 生成新对象 "H ello"<x-preset class="no-tts reference-tag disable-to-doc" data-index="1">1</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="3">3</x-preset>
     

4. 元组(tuple)

o 元素不可修改、添加或删除:

python

      t = (1, 2)
     # t<x-preset class="no-tts reference-tag disable-to-doc" data-index="0">0</x-preset> = 3     # 报错:TypeError<x-preset class="no-tts reference-tag disable-to-doc" data-index="2">2</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="3">3</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="4">4</x-preset><x-preset class="no-tts reference-tag disable-to-doc" data-index="5">5</x-preset>
     

5. 布尔值(bool)

o 属于整数的子类,只有 True 和 False 两个值,不可变。

o 例如:b = True,修改需重新赋值。

6. 不可变集合(frozenset)

o 类似集合,但创建后不可修改:

python

     fs = frozenset({1, 2})
     # fs.add(3)    # 报错:AttributeError
     


二、可变数据类型(对比)

o 列表(list):支持增删改操作,内存地址不变。

o 字典(dict):可动态修改键值对。

o 集合(set):允许添加或删除元素。

python

# 可变类型示例
lst = [1, 2]
print(id(lst))  # 地址1
lst.append(3)   # 原地修改
print(id(lst))  # 地址1(与之前相同)<x-preset class="no-tts reference-tag disable-to-doc" data-index="3">3</x-preset>

三、验证方法

通过 id() 函数观察对象地址是否变化:

python

# 不可变类型验证
s = "hello"
print(id(s))   # 地址1
s += "!"       # 生成新对象
print(id(s))   # 地址2(与地址1不同)<x-preset class="no-tts reference-tag disable-to-doc" data-index="3">3</x-preset>

# 可变类型验证
d = {"a": 1}
print(id(d))   # 地址3
d["b"] = 2     # 原地修改
print(id(d))   # 地址3(相同)<x-preset class="no-tts reference-tag disable-to-doc" data-index="3">3</x-preset>


四、常见误区与总结

1. 误区:

o 误认为不可变类型(如元组)的容器内可变元素(如列表)不可修改。

python

     t = ([1, 2], 3)
     t<x-preset class="no-tts reference-tag disable-to-doc" data-index="0">0</x-preset>.append(3)  # 合法!元组内列表是可变对象
     


2. 总结:

o 不可变类型:int, float, str, tuple, bool, frozenset 。

o 核心特征:修改操作会触发新对象创建,适用于需要哈希性(如字典键)的场景。

o 应用建议:优先使用不可变类型保证数据安全性和性能优化。

.

相关推荐

如何设计一个优秀的电子商务产品详情页

加入人人都是产品经理【起点学院】产品经理实战训练营,BAT产品总监手把手带你学产品电子商务网站的产品详情页面无疑是设计师和开发人员关注的最重要的网页之一。产品详情页面是客户作出“加入购物车”决定的页面...

怎么在JS中使用Ajax进行异步请求?

大家好,今天我来分享一项JavaScript的实战技巧,即如何在JS中使用Ajax进行异步请求,让你的网页速度瞬间提升。Ajax是一种在不刷新整个网页的情况下与服务器进行数据交互的技术,可以实现异步加...

中小企业如何组建,管理团队_中小企业应当如何开展组织结构设计变革

前言写了太多关于产品的东西觉得应该换换口味.从码农到架构师,从前端到平面再到UI、UE,最后走向了产品这条不归路,其实以前一直再给你们讲.产品经理跟项目经理区别没有特别大,两个岗位之间有很...

前端监控 SDK 开发分享_前端监控系统 开源

一、前言随着前端的发展和被重视,慢慢的行业内对于前端监控系统的重视程度也在增加。这里不对为什么需要监控再做解释。那我们先直接说说需求。对于中小型公司来说,可以直接使用三方的监控,比如自己搭建一套免费的...

Ajax 会被 fetch 取代吗?Axios 怎么办?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!今天给大家带来的主题是ajax、fetch...

前端面试题《AJAX》_前端面试ajax考点汇总

1.什么是ajax?ajax作用是什么?AJAX=异步JavaScript和XML。AJAX是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实...

Ajax 详细介绍_ajax

1、ajax是什么?asynchronousjavascriptandxml:异步的javascript和xml。ajax是用来改善用户体验的一种技术,其本质是利用浏览器内置的一个特殊的...

6款可替代dreamweaver的工具_替代powerdesigner的工具

dreamweaver对一个web前端工作者来说,再熟悉不过了,像我07年接触web前端开发就是用的dreamweaver,一直用到现在,身边的朋友有跟我推荐过各种更好用的可替代dreamweaver...

我敢保证,全网没有再比这更详细的Java知识点总结了,送你啊

接下来你看到的将是全网最详细的Java知识点总结,全文分为三大部分:Java基础、Java框架、Java+云数据小编将为大家仔细讲解每大部分里面的详细知识点,别眨眼,从小白到大佬、零基础到精通,你绝...

福斯《死侍》发布新剧照 &quot;小贱贱&quot;韦德被改造前造型曝光

时光网讯福斯出品的科幻片《死侍》今天发布新剧照,其中一张是较为罕见的死侍在被改造之前的剧照,其余两张剧照都是死侍在执行任务中的状态。据外媒推测,片方此时发布剧照,预计是为了给不久之后影片发布首款正式预...

2021年超详细的java学习路线总结—纯干货分享

本文整理了java开发的学习路线和相关的学习资源,非常适合零基础入门java的同学,希望大家在学习的时候,能够节省时间。纯干货,良心推荐!第一阶段:Java基础重点知识点:数据类型、核心语法、面向对象...

不用海淘,真黑五来到你身边:亚马逊15件热卖爆款推荐!

Fujifilm富士instaxMini8小黄人拍立得相机(黄色/蓝色)扫二维码进入购物页面黑五是入手一个轻巧可爱的拍立得相机的好时机,此款是mini8的小黄人特别版,除了颜色涂装成小黄人...

2025 年 Python 爬虫四大前沿技术:从异步到 AI

作为互联网大厂的后端Python爬虫开发,你是否也曾遇到过这些痛点:面对海量目标URL,单线程爬虫爬取一周还没完成任务;动态渲染的SPA页面,requests库返回的全是空白代码;好不容易...

最贱超级英雄《死侍》来了!_死侍超燃

死侍Deadpool(2016)导演:蒂姆·米勒编剧:略特·里斯/保罗·沃尼克主演:瑞恩·雷诺兹/莫蕾娜·巴卡林/吉娜·卡拉诺/艾德·斯克林/T·J·米勒类型:动作/...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...