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

快速理解并记住Python中的可变与不可变对象

要快速理解并记住Python中的可变与不可变对象,关键在于掌握其核心区别,并对常见数据类型进行分类记忆。

核心概念:一句话理解可变与不可变

  • 不可变 (Immutable) 对象:一旦创建,其就不能被“原地”修改。任何试图修改它的操作都会创建一个全新的对象。
  • 可变 (Mutable) 对象:创建之后,可以“原地”修改其,而不会创建新的对象。

一个生动的比喻:

  • 不可变对象就像一张已经写了字的纸。如果你想修改内容,你不能直接在原来的字上改,只能拿一张新纸,写上修改后的内容。原来的那张纸并没有变。
  • 可变对象就像一个购物篮。你可以随时往里面添加或拿出商品,购物篮本身还是那个购物篮,只是里面的东西变了。

哪些是可变的,哪些是不可变的?

在Python中,数据类型可以分为可变和不可变两大类。

不可变数据类型 (Immutable Types):

  • 数字 (Number): 包括整数 (int)、浮点数 (float)、布尔值 (bool)。 当你执行 x = 5,然后再执行 x = x + 1 时,并不是数字5变成了6,而是创建了一个新的值为6的对象,并让变量 x 指向它。
  • 字符串 (String): str 类型。 任何对字符串的修改,如拼接或替换,都会返回一个全新的字符串。
  • 元组 (Tuple): tuple 类型。 元组一旦创建,就不能添加、删除或修改其元素。

可变数据类型 (Mutable Types):

  • 列表 (List): list 类型。 可以自由地添加、删除或修改列表中的元素。
  • 字典 (Dictionary): dict 类型。 可以添加、删除或修改键值对。
  • 集合 (Set): set 类型。 可以添加或删除集合中的元素。

快速记忆方法

  1. 记住基础类型是不可变的:数字和字符串,这些最基本、最常用的数据单元,都是不可变的。
  2. 通过符号区分容器类型
    • 圆括号 () 包围的 元组 (Tuple)不可变的。可以记作“圆滑,已经是经历社会毒打后的最终形态,不会再改变了”。
    • 方括号 [] 包围的 列表 (List) 和花括号 {} 包围的 字典 (Dict) / 集合 (Set) 都是可变的。可以记作“有棱有角,方便改变”。
  3. 理解“原地修改”:可变类型的操作,如 list.append()dict['key'] = 'value',都是在对象本身上进行修改,不会改变对象的内存地址。而对不可变类型的操作,实际上是生成了新的对象。

总结表格:

数据类型可变性英文名称示例
数字不可变int, float, bool10, 3.14, True
字符串不可变str"hello"
元组不可变tuple(1, 2, 3)
列表可变list``
字典可变dict{'a': 1}
集合可变set{1, 2, 3}

理解可变与不可变的重要性

  • 函数参数传递:当函数参数是不可变对象时,函数内部的修改不会影响到函数外部的原始对象。 而当参数是可变对象时,函数内部的修改会直接影响到外部的原始对象。
  • 性能:在需要频繁修改数据的场景下,使用可变类型通常更高效,因为它避免了重复创建新对象的开销。
  • 作为字典的键:只有不可变对象(如字符串、数字、元组)才能作为字典的键,因为键的值必须是唯一的且不能改变。

通过以上方法,你可以快速建立起对Python中可变与不可变对象的清晰认识,并在实际编程中做出正确的选择。


文章转载自:

http://jvIctrHe.yhywr.cn
http://bx80XMOS.yhywr.cn
http://wX3JVKfc.yhywr.cn
http://g6DAwrEX.yhywr.cn
http://oefdWSfQ.yhywr.cn
http://ETvq2s5F.yhywr.cn
http://xgUDtmNO.yhywr.cn
http://EveeDKm6.yhywr.cn
http://113n6rec.yhywr.cn
http://SWaZbJgn.yhywr.cn
http://rVZYckUW.yhywr.cn
http://kOhSjq5r.yhywr.cn
http://9zYoQads.yhywr.cn
http://clsNyP1B.yhywr.cn
http://CnhFIRnJ.yhywr.cn
http://hUFmdw5t.yhywr.cn
http://4DWHcnPK.yhywr.cn
http://vsphqhlQ.yhywr.cn
http://89meJx33.yhywr.cn
http://3TxpmTkX.yhywr.cn
http://wBA9t9u7.yhywr.cn
http://De2uQGzp.yhywr.cn
http://yuIR5v34.yhywr.cn
http://ImkCmVmp.yhywr.cn
http://Z26Ihq0S.yhywr.cn
http://uQ4voU7c.yhywr.cn
http://QQb72VNc.yhywr.cn
http://g9tqxx5E.yhywr.cn
http://BVK9h1sY.yhywr.cn
http://D2EKqQDd.yhywr.cn
http://www.dtcms.com/a/381056.html

相关文章:

  • Netty 调优篇:实战配置、性能监控与常见坑
  • ZYNQ7020+AD9361裸机驱动验证
  • 【超简单】后端入门案例-基于SpringBoot+MyBatis-plus+MySQL图书管理系统
  • 【C++】:list容器全面解析(超详细)
  • Java 笔记 OCA 备考Checked Exception(受检异常)
  • DAY 26 函数专题1:函数定义与参数-2025.9.13
  • MySQL的基础和进阶与运维
  • 看到手就亮灯 防夹手视觉光栅
  • QT M/V架构开发实战:M/V架构的初步认识
  • 4.2-中间件之MySQL
  • 基于hiprint的票据定位打印系统开发实践
  • 批量获取虾皮商品数据:开放API接口操作详解
  • @JsonFormat 如何在get请求中日期字段不报错还能使用
  • C/C++ 标准库中的 `strspn` 函数
  • 关闭click for mouse control
  • C语言打印爱心
  • Notion-Folder-Opener | 一个极简、稳定的本地“链接→打开文件/文件夹”工具
  • Linux系统 SELinux 安全管理与故障排查
  • Vue:后端服务代码解析
  • 仓颉语言与C++对比深度解析:从特性对比到语言选型及实践
  • 嵌入式 - ARM6
  • uniapp | 快速上手ThorUI组件
  • 容器使用绑定挂载
  • 智能排班系统哪个好?从L1到L4,AI排班软件选型指南
  • CentOS7.9 离线升级内核
  • 杨辉三角**
  • Android「Global / Secure / System」三大命名空间全局设置项总结
  • 【嵌入式】【科普】运动控制岗位相关职责
  • 期货盘后空开是认购期权行权?
  • 【一天一个Web3概念】Web3.0赛道分析:新一轮技术浪潮下的机遇与挑战