📋 Python 数据类型分类详解
这张图是Python入门阶段对数据类型的基础分类,核心将数据分为数字型 和非数字型两大类,下面是详细解读与补充说明:
一、数字型(Numeric Types)
用于存储数值,支持数学运算,Python 3 中包含以下4种:
1. 整型(int)
- 对应数学中的整数,正负整数、0 都属于此类,无大小限制(Python 2 有 int/long 区分,Python 3 统一为 int)
- 示例:
10、-5、0、1000000000000
2. 浮点型(float)
- 对应数学中的小数,也可表示科学计数法形式的数值
- 注意:存在精度误差(如
0.1 + 0.2 != 0.3),高精度计算需用decimal模块 - 示例:
3.14、-0.5、1.2e3(即1200)
3. 布尔型(bool)
- 本质是整型的子类:
True等价于1,False等价于0 - 核心规则:非零即真 ,除了
0、0.0、空容器、None外,绝大多数值在布尔判断中都为True - 示例:
bool(1) → True,bool(0) → False,bool("abc") → True
4. 复数型(complex)
- 由实部和虚部组成,格式为
a + bj(j为虚数单位,等价于数学中的i) - 主要用于科学计算:平面场问题、波动分析、电路电感电容计算等
- 示例:
3+4j、-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()验证数据类型,例如:pythonprint(type(10)) # <class 'int'> print(isinstance(True, int)) # True(验证布尔型是int子类) -
实际开发建议 :
- 下拉框、列表数据优先用列表存储
- 配置、接口返回数据优先用字典存储
- 需保证数据不被修改时用元组
- 去重场景用集合(set)
📋 Python 数据类型速查表(含操作、转换、易错点)
这份速查表覆盖了Python核心数据类型,按数字型 和非数字型分类,整理了常用操作、类型转换和高频易错点,适合开发和学习快速查阅。
一、数字型(Numeric Types)
1. 核心类型总览
| 类型 | 英文标识 | 说明 | 示例 |
|---|---|---|---|
| 整型 | int |
整数,无大小限制 | 10, -5, 0, 0b101(二进制), 0o12(八进制), 0xA(十六进制) |
| 浮点型 | float |
小数/科学计数法,存在精度误差 | 3.14, -0.5, 1.2e3(=1200) |
| 布尔型 | bool |
逻辑值,int的子类 |
True(=1), False(=0) |
| 复数型 | complex |
实部+虚部,科学计算专用 | 3+4j, -2j |
2. 常用操作
通用数学运算
| 操作 | 符号 | 示例 | 结果 |
|---|---|---|---|
| 加法 | + |
3 + 5 |
8 |
| 减法 | - |
10 - 3 |
7 |
| 乘法 | * |
4 * 2.5 |
10.0 |
| 除法 | / |
7 / 2 |
3.5(Python3 始终返回float) |
| 整除 | // |
7 // 2 |
3(向下取整) |
| 取余 | % |
7 % 2 |
1 |
| 幂运算 | ** |
2 ** 3 |
8 |
| 绝对值 | abs() |
abs(-5) |
5 |
| 四舍五入 | round() |
round(3.1415, 2) |
3.14 |
| 类型判断 | type()/isinstance() |
isinstance(True, int) |
True |
布尔型专属规则
-
非零即真 :除
0/0.0/空容器/None外,所有值布尔判断为True -
逻辑运算:
and/or/notpythonTrue and False # False True or False # True not True # False
复数型专属操作
python
c = 3 + 4j
c.real # 3.0(实部)
c.imag # 4.0(虚部)
abs(c) # 5.0(模长)
3. 类型转换
| 原类型 → 目标类型 | 方法 | 示例 | 说明 |
|---|---|---|---|
| 任意数字 → int | int(x) |
int(3.9) → 3 |
截断小数,不四舍五入;int(True)→1 |
| 任意数字 → float | float(x) |
float(5) → 5.0 |
整数转小数 |
| 任意数字 → bool | bool(x) |
bool(0)→False,bool(1)→True |
非零即真 |
| 数字 → complex | complex(x)/complex(x,y) |
complex(3,4)→3+4j |
生成复数 |
| 字符串 → 数字 | int("123")/float("3.14") |
int("100")→100 |
字符串必须是合法数字格式,否则报错 |
4. 高频易错点
❌ 错误1:浮点精度问题
python
0.1 + 0.2 # 结果是0.30000000000000004,不是0.3
# 解决方案:用decimal模块做高精度计算
from decimal import Decimal
Decimal('0.1') + Decimal('0.2') # 0.3
❌ 错误2:布尔型是int子类
python
True + 1 # 结果是2(True=1)
False * 5 # 结果是0(False=0)
# 注意:不要用布尔型做数学运算,避免逻辑混乱
❌ 错误3:整除向下取整
python
-7 // 2 # 结果是-4,不是-3(向下取整,向更小的数取整)
❌ 错误4:复数不能直接比较大小
python
3+4j > 2+1j # 直接报错,复数不支持大小比较
二、非数字型(容器/序列类型)
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" + "world" |
"helloworld" |
| 重复 | * |
"ab" * 3 |
"ababab" |
| 长度 | 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-string |
f"年龄:{18}" |
"年龄:18" |
列表(list)
| 操作 | 方法/语法 | 示例 | 结果 |
|---|---|---|---|
| 增 | append()/insert() |
lst.append(4) |
末尾加元素 |
| 删 | pop()/remove() |
lst.pop(0) |
删除索引0元素 |
| 改 | lst[index] = x |
lst[0] = 10 |
修改指定位置元素 |
| 查 | lst[index]/in |
3 in lst |
判断元素是否存在 |
| 排序 | sort()/sorted() |
lst.sort() |
原地升序排序 |
| 反转 | reverse() |
lst.reverse() |
原地反转列表 |
| 合并 | +/extend() |
lst1 + lst2 |
合并两个列表 |
元组(tuple)
- 核心操作:切片、拼接、长度、成员判断(与列表一致)
- 唯一区别:不可修改,创建后无法增删改元素
- 单元素元组必须加逗号:
(1,)(否则是int类型)
字典(dict)
| 操作 | 方法/语法 | 示例 | 结果 |
|---|---|---|---|
| 增/改 | dict[key] = value |
d["age"] = 20 |
键存在则修改,不存在则新增 |
| 查 | dict[key]/get() |
d.get("name", "默认") |
键不存在返回默认值,不报错 |
| 删 | pop()/del |
d.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} |
| 差集 | -/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:字符串/元组不可修改
python
s = "abc"
s[0] = "x" # 直接报错,字符串不可变
# 解决方案:生成新字符串
s = "x" + s[1:] # "xbc"
❌ 错误2:列表浅拷贝问题
python
lst1 = [1,2,3]
lst2 = lst1 # 浅拷贝,两个变量指向同一个对象
lst2[0] = 10 # lst1也会被修改
# 解决方案:深拷贝
import copy
lst2 = copy.deepcopy(lst1)
# 或切片拷贝
lst2 = lst1[:]
❌ 错误3:字典键必须不可变
python
d = {[1,2]: "value"} # 直接报错,列表是可变类型,不能做键
# 合法键:字符串、数字、元组
d = {(1,2): "value"} # 正确
❌ 错误4:集合无序,不能用索引访问
python
s = {1,2,3}
s[0] # 直接报错,集合无索引
# 解决方案:转列表访问
lst = list(s)
lst[0]
❌ 错误5:列表sort()和sorted()的区别
python
lst = [3,1,2]
lst.sort() # 原地排序,返回None,lst被修改
new_lst = sorted(lst) # 生成新列表,原lst不变
❌ 错误6:字典get()和直接取值的区别
python
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 - 其余所有值布尔判断均为
True
3. 类型判断最佳实践
python
# 推荐用isinstance(),支持继承判断
isinstance(True, int) # True
# 不推荐用type(),不支持继承
type(True) == int # False
四、速查表使用建议
- 开发时:遇到类型操作直接查表,避免重复踩坑
- 学习时 :重点掌握可变/不可变 、类型转换 、易错点,是Python面试高频考点
- 调试时 :用
type()/isinstance()快速定位类型问题,用print()验证操作结果