Python 数据类型分类详解

张开发
2026/4/10 8:24:44 15 分钟阅读

分享文章

Python 数据类型分类详解
Python 数据类型分类详解这张图是Python入门阶段对数据类型的基础分类核心将数据分为数字型和非数字型两大类下面是详细解读与补充说明一、数字型Numeric Types用于存储数值支持数学运算Python 3 中包含以下4种1. 整型int对应数学中的整数正负整数、0 都属于此类无大小限制Python 2 有 int/long 区分Python 3 统一为 int示例10、-5、0、10000000000002. 浮点型float对应数学中的小数也可表示科学计数法形式的数值注意存在精度误差如0.1 0.2 ! 0.3高精度计算需用decimal模块示例3.14、-0.5、1.2e3即12003. 布尔型bool本质是整型的子类True等价于1False等价于0核心规则非零即真除了0、0.0、空容器、None外绝大多数值在布尔判断中都为True示例bool(1) → Truebool(0) → Falsebool(abc) → True4. 复数型complex由实部和虚部组成格式为a bjj为虚数单位等价于数学中的i主要用于科学计算平面场问题、波动分析、电路电感电容计算等示例34j、-2j可通过.real获取实部、.imag获取虚部二、非数字型Sequence/Mapping Types用于存储批量数据或键值对是Python开发中最常用的类型1. 字符串str用单引号/双引号/三引号包裹的字符序列不可变类型修改会生成新字符串支持切片、拼接、格式化等操作是文本处理的核心类型示例hello、Python、多行字符串2. 列表list用[]包裹的有序可变序列可存储任意类型数据数字、字符串、列表等支持增删改查、排序、切片等操作是最灵活的容器类型示例[1, 2, abc, True]3. 元组tuple用()包裹的有序不可变序列特性与列表类似但创建后无法修改常用于保护数据不被篡改、函数多返回值、字典键等场景示例(1, 2, abc)、(1,)单元素元组必须加逗号4. 字典dict用{}包裹的键值对key-value集合Python 3.7 为有序结构键key必须是不可变类型字符串、数字、元组值value可任意类型核心用于快速查找数据是后端接口、配置文件的常用数据结构示例{name: 张三, age: 18} 补充说明与避坑提示分类补充图中分类是入门简化版Python 标准分类中布尔型属于数字型的子类此外还有集合set、NoneType 等常用类型未列出可变 vs 不可变不可变类型数字、字符串、元组 → 修改会生成新对象内存效率更高可变类型列表、字典、集合 → 可原地修改适合动态数据类型判断可通过type()或isinstance()验证数据类型例如print(type(10))# class intprint(isinstance(True,int))# True验证布尔型是int子类实际开发建议下拉框、列表数据优先用列表存储配置、接口返回数据优先用字典存储需保证数据不被修改时用元组去重场景用集合set Python 数据类型速查表含操作、转换、易错点这份速查表覆盖了Python核心数据类型按数字型和非数字型分类整理了常用操作、类型转换和高频易错点适合开发和学习快速查阅。一、数字型Numeric Types1. 核心类型总览类型英文标识说明示例整型int整数无大小限制10,-5,0,0b101(二进制),0o12(八进制),0xA(十六进制)浮点型float小数/科学计数法存在精度误差3.14,-0.5,1.2e3(1200)布尔型bool逻辑值int的子类True(1),False(0)复数型complex实部虚部科学计算专用34j,-2j2. 常用操作通用数学运算操作符号示例结果加法3 58减法-10 - 37乘法*4 * 2.510.0除法/7 / 23.5Python3 始终返回float整除//7 // 23向下取整取余%7 % 21幂运算**2 ** 38绝对值abs()abs(-5)5四舍五入round()round(3.1415, 2)3.14类型判断type()/isinstance()isinstance(True, int)True布尔型专属规则非零即真除0/0.0/空容器/None外所有值布尔判断为True逻辑运算and/or/notTrueandFalse# FalseTrueorFalse# TruenotTrue# False复数型专属操作c34jc.real# 3.0实部c.imag# 4.0虚部abs(c)# 5.0模长3. 类型转换原类型 → 目标类型方法示例说明任意数字 → intint(x)int(3.9)→3截断小数不四舍五入int(True)→1任意数字 → floatfloat(x)float(5)→5.0整数转小数任意数字 → boolbool(x)bool(0)→Falsebool(1)→True非零即真数字 → complexcomplex(x)/complex(x,y)complex(3,4)→34j生成复数字符串 → 数字int(123)/float(3.14)int(100)→100字符串必须是合法数字格式否则报错4. 高频易错点❌错误1浮点精度问题0.10.2# 结果是0.30000000000000004不是0.3# 解决方案用decimal模块做高精度计算fromdecimalimportDecimal Decimal(0.1)Decimal(0.2)# 0.3❌错误2布尔型是int子类True1# 结果是2True1False*5# 结果是0False0# 注意不要用布尔型做数学运算避免逻辑混乱❌错误3整除向下取整-7//2# 结果是-4不是-3向下取整向更小的数取整❌错误4复数不能直接比较大小34j21j# 直接报错复数不支持大小比较二、非数字型容器/序列类型1. 核心类型总览类型英文标识可变性有序性核心用途示例字符串str❌不可变✅有序文本存储hello,Python列表list✅可变✅有序动态数组、批量数据[1, 2, abc]元组tuple❌不可变✅有序固定数据、函数多返回值(1, 2, abc)字典dict✅可变✅有序(Python3.7)键值对、快速查找{name:张三, age:18}集合set✅可变❌无序去重、集合运算{1, 2, 3}2. 常用操作速查字符串str操作方法/语法示例结果切片s[start:end:step]abcdef[1:4]bcd拼接hello worldhelloworld重复*ab * 3ababab长度len()len(abc)3查找find()abc.find(b)1找不到返回-1替换replace()abc.replace(b,x)axc分割split()a,b,c.split(,)[a,b,c]大小写转换upper()/lower()abc.upper()ABC格式化f-stringf年龄:{18}年龄:18列表list操作方法/语法示例结果增append()/insert()lst.append(4)末尾加元素删pop()/remove()lst.pop(0)删除索引0元素改lst[index] xlst[0] 10修改指定位置元素查lst[index]/in3 in lst判断元素是否存在排序sort()/sorted()lst.sort()原地升序排序反转reverse()lst.reverse()原地反转列表合并/extend()lst1 lst2合并两个列表元组tuple核心操作切片、拼接、长度、成员判断与列表一致唯一区别不可修改创建后无法增删改元素单元素元组必须加逗号(1,)否则是int类型字典dict操作方法/语法示例结果增/改dict[key] valued[age] 20键存在则修改不存在则新增查dict[key]/get()d.get(name, 默认)键不存在返回默认值不报错删pop()/deld.pop(age)删除指定键值对遍历keys()/values()/items()for k,v in d.items()遍历键值对合并update()d1.update(d2)将d2合并到d1集合set操作方法/语法示例结果增add()s.add(4)添加元素删remove()/discard()s.discard(5)元素不存在不报错去重set(lst)set([1,2,2,3]){1,2,3}交集/intersection(){1,2} {2,3}{2}并集|/union(){1,2} | {2,3}{1,2,3}差集-/difference(){1,2} - {2,3}{1}3. 类型转换原类型 → 目标类型方法示例说明列表 ↔ 元组list(tuple)/tuple(list)tuple([1,2])→(1,2)互相转换列表/元组 ↔ 集合set(lst)/list(set)set([1,2,2])→{1,2}列表转集合自动去重字符串 ↔ 列表list(str)/.join(lst)list(abc)→[a,b,c]字符串拆分为字符列表字典 ↔ 列表list(dict.keys())list({a:1}.keys())→[a]提取键/值为列表数字 ↔ 字符串str(num)/int(str)str(123)→123数字转字符串/字符串转数字4. 高频易错点❌错误1字符串/元组不可修改sabcs[0]x# 直接报错字符串不可变# 解决方案生成新字符串sxs[1:]# xbc❌错误2列表浅拷贝问题lst1[1,2,3]lst2lst1# 浅拷贝两个变量指向同一个对象lst2[0]10# lst1也会被修改# 解决方案深拷贝importcopy lst2copy.deepcopy(lst1)# 或切片拷贝lst2lst1[:]❌错误3字典键必须不可变d{[1,2]:value}# 直接报错列表是可变类型不能做键# 合法键字符串、数字、元组d{(1,2):value}# 正确❌错误4集合无序不能用索引访问s{1,2,3}s[0]# 直接报错集合无索引# 解决方案转列表访问lstlist(s)lst[0]❌错误5列表sort()和sorted()的区别lst[3,1,2]lst.sort()# 原地排序返回Nonelst被修改new_lstsorted(lst)# 生成新列表原lst不变❌错误6字典get()和直接取值的区别d{name:张三}d[age]# 直接报错键不存在d.get(age,18)# 键不存在返回默认值18不报错三、通用核心知识点1. 可变 vs 不可变类型分类包含类型特性内存影响不可变int/float/bool/str/tuple修改会生成新对象原对象不变内存更高效适合做字典键可变list/dict/set可原地修改原对象直接变化适合动态数据不能做字典键2. 空值与布尔判断空值None独立类型NoneType布尔判断为False的情况0/0.0/False//[]/()/{}/None其余所有值布尔判断均为True3. 类型判断最佳实践# 推荐用isinstance()支持继承判断isinstance(True,int)# True# 不推荐用type()不支持继承type(True)int# False四、速查表使用建议开发时遇到类型操作直接查表避免重复踩坑学习时重点掌握可变/不可变、类型转换、易错点是Python面试高频考点调试时用type()/isinstance()快速定位类型问题用print()验证操作结果

更多文章