当前位置: 首页 > news >正文

按「数据可变性」划分,Python有哪些变量类型?

你想聚焦了解按「数据可变性」划分的 Python 变量类型,这是 Python 中非常核心的基础概念,我会把这部分内容讲得更聚焦、更易懂,帮你彻底理清。

核心分类:可变变量 vs 不可变变量

数据可变性的核心判断标准是:变量指向的内存地址中的数据,能否被「原地修改」

  • 不可变:修改时会创建新的内存地址(变量指向新地址,原地址数据不变)
  • 可变:修改时不改变内存地址(直接修改原地址的数据)
一、不可变变量(Immutable)

这类变量的核心特征是:一旦创建,其内部的值就无法在原有内存地址上被修改。如果 “修改”,本质是创建了一个新的对象,变量名重新指向这个新对象。

表格

类型示例关键说明
int(整数)a = 10; a = 20看似修改,实际 a 指向了新的整数对象 20
float(浮点数)b = 3.14; b = 3.1415同上,浮点数不可原地修改
str(字符串)s = "hello"; s += " world"字符串拼接会生成新字符串,原字符串不变
tuple(元组)t = (1, 2); t = (1, 2, 3)元组本身不可变,重新赋值是指向新元组
bool(布尔)flag = True; flag = False布尔值只有 True/False,修改即指向新对象
frozenset(不可变集合)fs = frozenset({1,2}); fs.add(3)报错!不可变集合无法添加 / 删除元素

代码示例(直观理解内存地址变化)

python

运行

# 整数不可变 a = 10 print(f"修改前地址:{id(a)}") # 输出一个固定的内存地址 a = 20 print(f"修改后地址:{id(a)}") # 地址变了,说明是新对象 # 字符串不可变 s = "hello" print(f"修改前地址:{id(s)}") s = s + " world" print(f"修改后地址:{id(s)}") # 地址变了 # 元组不可变(即使包含可变元素,元组本身也不可变) t = (1, [2, 3]) # t[0] = 100 # 报错:元组元素不可修改 t[1].append(4) # 元组内的列表(可变)可以改,但元组本身的结构不变 print(t) # (1, [2, 3, 4]) print(f"元组地址:{id(t)}") # 地址仍不变
二、可变变量(Mutable)

这类变量的核心特征是:可以在不改变内存地址的前提下,直接修改内部的数据(增删改查)。

表格

类型示例关键说明
list(列表)lst = [1,2]; lst.append(3)原地添加元素,列表地址不变
dict(字典)dic = {"name":"张三"}; dic["age"]=20原地新增键值对,字典地址不变
set(集合)s = {1,2}; s.add(3)原地添加元素,集合地址不变

代码示例(验证内存地址不变)

python

运行

# 列表可变 lst = [1, 2, 3] print(f"修改前地址:{id(lst)}") lst.append(4) # 原地修改 lst[0] = 100 # 原地修改元素 print(lst) # [100, 2, 3, 4] print(f"修改后地址:{id(lst)}") # 地址不变 # 字典可变 dic = {"name": "张三"} print(f"修改前地址:{id(dic)}") dic["age"] = 20 # 原地新增 dic["name"] = "李四" # 原地修改值 print(dic) # {"name":"李四", "age":20} print(f"修改后地址:{id(dic)}") # 地址不变 # 集合可变 s = {1, 2, 3} print(f"修改前地址:{id(s)}") s.remove(2) # 原地删除 s.add(4) # 原地添加 print(s) # {1, 3, 4} print(f"修改后地址:{id(s)}") # 地址不变

实用小技巧:如何判断变量是否可变?

可以用id()函数查看变量的内存地址,修改数据后再查一次:

  • 地址变了 → 不可变类型
  • 地址不变 → 可变类型

总结

  1. 不可变变量:int、float、str、tuple、bool、frozenset,核心是「不能原地修改,修改即新建对象」。
  2. 可变变量:list、dict、set,核心是「可原地修改,内存地址不变」。
  3. 关键易错点:元组本身不可变,但如果元组内包含列表、字典等可变元素,这些元素可以被修改(元组的 “不可变” 仅指其元素的位置和类型不可改)。

掌握可变性的核心区别,能帮你理解 Python 的内存管理、函数传参(值传递 / 引用传递)等进阶知识点,避免后续踩坑。

http://www.jsqmd.com/news/602681/

相关文章:

  • 从像素到相机:深度解析坐标转换的关键步骤
  • 3DS游戏格式转换指南:用3dsconv轻松实现CCI到CIA的完美转换
  • 从蓝图使用者到系统架构师:FactoryBluePrints开源项目深度解析与效能突破策略
  • ncmdump开源工具:NCM格式音频转换与解密的完整解决方案
  • Wan2.2-TI2V-5B混合专家架构深度解析:消费级GPU上的720P视频生成革命
  • RBTray完整指南:一键清理Windows任务栏的终极窗口管理神器
  • 材料力学测试高效精准!智能电子拉力试验机哪个厂家好?十大品牌实力推荐 - 品牌推荐大师
  • xarray-1-理论和xarray.rst翻译 - Hello
  • 安全小白也能看懂:用ZAP的“策略”功能,5分钟定制你的专属扫描方案
  • MATLAB Simulink下的车辆运动学仿真:实时位置与车身姿态研究
  • 从内容管控到硬件隔离:Chrome 安全防护体系深度拆解
  • DC-DC移相全桥MATLAB仿真 DC- DC移相全桥电路 移相全桥DC-DC变换器matlab_simulink仿真,功率管采用mosfet,副边接整流电路。 采用PWM控制
  • 中石油加油卡回收,五种解法,客观比对 - 京回收小程序
  • 你的防脱洗发水里有乌诺地尔吗?没有就别怪头发留不住 - 速递信息
  • 2026 年数据中心 智算中心品牌 TOP10 行业分析:国产崛起、行业选型 - 深度智识库
  • G-Helper:华硕笔记本轻量替代方案,性能释放与能效优化的开源工具
  • 如何高效解析城通网盘链接:这款开源工具让下载速度提升10倍
  • 全球工业不间断电源行业市场规模与增长预测
  • 网盘下载速度太慢?这款开源工具让你告别限速烦恼!
  • 你的手速拖后腿了吗?5款在线CPS测试工具横评与实战技巧
  • 假发品牌如何选择?2026年4月推荐评测口碑对比顶尖五款 - 品牌推荐
  • 检查基础资料引用增加BaseDataRefList无效
  • DocSys文件管理系统:如何用Java打造企业级文档协作平台(附GitHub源码)
  • 实战指南:基于快马平台开发在线教育vc16188视频交互系统
  • 利用GCC特性实现MCU固件版本号的绝对地址存储
  • SEO优化与网站内链优化有什么区别_SEO优化的方法论有哪些
  • Temu半托管模式下的多语言挑战:跨马翻译如何帮助卖家应对欧美本地化要求
  • YOLOv8实战:如何用Python脚本批量预测验证码并提升识别准确率?
  • 别再乱用防脱洗发水了!常见的防脱成分评测,看完秒懂怎么选 - 速递信息
  • 2026年三坐标测量机十大品牌及厂家实力深度对比 - 品牌推荐大师