Python 数据类型Python 中的数据类型可以分为以下几大类一、基本数据类型1. 数字类型Numeric类型说明示例int整数a 10float浮点数b 3.14complex复数c 3 4jbool布尔值int 的子类d True注意数字类型是不可改变的数据类型改变数字类型会分配一个新的对象。2. 字符串类型String类型说明示例str字符串s Hello注意字符串是不可改变的数据类型改变字符串会分配一个新的对象。二、序列类型Sequence类型说明可变性示例list列表✅ 可变[1, 2, 3]tuple元组❌ 不可变(1, 2, 3)range范围序列❌ 不可变range(10)三、集合类型Set类型说明可变性示例set集合✅ 可变{1, 2, 3}frozenset冻结集合❌ 不可变frozenset({1, 2})四、映射类型Mapping类型说明示例dict字典键值对{name: Tom, age: 20}五、二进制类型Binary类型说明可变性示例bytes字节序列❌ 不可变bhellobytearray字节数组✅ 可变bytearray(5)memoryview内存视图—memoryview(bhello)六、特殊类型类型说明示例NoneType空值None七、类型查看与转换查看类型x 10 print(type(x)) # class int print(isinstance(x, int)) # True常见类型转换# 类型转换 int(123) # 字符串 → 整数123 float(3.14) # 字符串 → 浮点数3.14 str(100) # 整数 → 字符串100 list((1, 2, 3)) # 元组 → 列表[1, 2, 3] tuple([1, 2, 3]) # 列表 → 元组(1, 2, 3) set([1, 2, 2]) # 列表 → 集合{1, 2} dict([(a, 1)]) # 列表 → 字典{a: 1} bool(0) # 整数 → 布尔False bool(1) # 整数 → 布尔True八、总结图Python 数据类型 ├── 数字类型int, float, complex, bool ├── 字符串str ├── 序列类型list, tuple, range ├── 集合类型set, frozenset ├── 映射类型dict ├── 二进制类型bytes, bytearray, memoryview └── 特殊类型NoneType提示Python 是动态类型语言变量不需要声明类型解释器会在运行时自动推断类型。九、数据不可变性一、简单理解不可变Immutable的意思是元组一旦创建里面的元素就不能被修改、添加或删除。二、对比理解列表 vs 元组✅ 列表list— 可变my_list [1, 2, 3] my_list[0] 100 # ✅ 可以修改元素 my_list.append(4) # ✅ 可以添加元素 my_list.remove(2) # ✅ 可以删除元素 print(my_list) # [100, 3, 4]❌ 元组tuple— 不可变my_tuple (1, 2, 3) my_tuple[0] 100 # ❌ 报错TypeError my_tuple.append(4) # ❌ 报错元组没有 append 方法 del my_tuple[1] # ❌ 报错不能删除元素报错信息TypeError: tuple object does not support item assignment三、不可变具体指什么不可变指的是元组中每个位置存储的引用指向不能改变t (1, hello, [10, 20]) t[0] 999 # ❌ 不能改变第 0 个位置指向的对象 t[1] world # ❌ 不能改变第 1 个位置指向的对象⚠️ 特殊情况元组里包含可变对象t (1, 2, [10, 20]) # 不能更改元组的引用 t[2] [30, 40] # ❌ 报错不能让第2个位置指向新列表 # 但是可以修改列表内部的内容 t[2][0] 999 # ✅ 可以修改的是列表内部不是元组的引用 t[2].append(30) # ✅ 可以 print(t) # (1, 2, [999, 20, 30])图示理解元组 t ┌─────┬─────┬─────────┐ │ 0 │ 1 │ 2 │ ← 这些格子引用不能变 │ ↓ │ ↓ │ ↓ │ │ 1 │ 2 │ [10,20] │ ← 但列表本身是可变的内部可以改 └─────┴─────┴─────────┘ ❌ 不能让格子指向别的东西元组的不可变性 ✅ 但如果格子指向的东西本身可变那东西内部可以变四、为什么要用不可变的元组优点说明安全性数据不会被意外修改适合存储常量数据性能更好元组比列表占用更少内存访问速度更快可作为字典的 key字典的 key 必须是不可变类型元组可以列表不行可作为集合元素集合中的元素必须是不可变类型# 元组可以做字典的 key locations { (0, 0): 原点, (1, 2): 目标点, } # 列表不行 locations { [0, 0]: 原点, # ❌ TypeError: unhashable type: list }五、一句话总结元组的不可变性 创建后不能增、不能删、不能改指引用不能变是一种只读的序列。这就像用 Unity 中的readonly修饰的字段一样——一旦赋值就不能再更改引用// C# 中类似的概念 readonly int[] arr new int[] { 1, 2, 3 }; // arr new int[] { 4, 5 }; // ❌ 不能重新赋值 // arr[0] 100; // ✅ 但内部元素可以改和元组包含列表的情况类似