
一、常见数据类型及其特点Python 的数据类型可以分两大类不可变类型和可变类型。这个区分是很多考点的基础。1. 不可变类型值变了对象就换了整数int特点精度无限只有整数不分长短。适合大数运算。考点小整数池-5~256内的整数会被预先缓存所以a256; b256时a is b为True但257就不同了。浮点数float特点底层是 IEEE 754 双精度也就是 C 语言的double。有精度限制。考点精度丢失是必考题0.1 0.2 0.3结果为False。正确的比较方式是用abs(a - b) 1e-9之类的方式。布尔值bool特点True和False它是int的子类True1False0。考点所有对象的“真值测试”比如空容器、0、None都视为False。字符串str特点Unicode 字符序列有序、不可变。考点字符串驻留由字母数字下划线组成的字符串可能被自动驻留、各种格式化方式。元组tuple特点有序、不可变序列。考点单元素元组的陷阱写法必须是(1,)而不能是(1)。2. 可变类型内容变了对象不变列表list特点有序、可变的动态数组存的是对象引用。考点深浅拷贝、列表推导式、appendvsextend的区别。字典dict特点无序Python 3.7 保证插入顺序、可变键必须可哈希不可变类型。考点键的哈希性要求所以列表不能做键元组可以、get方法防崩溃、字典合并。集合set特点元素唯一、无序、可变原理同字典的键。考点去重、以及集合的交、并、差运算在成员关系判断上的高效性O(1)。二、常见考点分类总结这通常是面试和笔试的高频区。1. 可变性陷阱重中之重默认参数问题函数默认参数只在定义时计算一次。绝不能用[]或{}做默认值会导致多次调用共享同一个可变对象。列表引用问题a [1, 2]; b a后修改b会直接影响a。2. 深浅拷贝在嵌套列表a [[1], [2]]这样的结构中浅拷贝b a.copy()外层容器是新的但内层列表仍是原引用。改内层会联动。深拷贝c copy.deepcopy(a)递归复制新旧对象完全独立。3. “” 与 “is” 的本质区别比较的是值是否相等。is比较的是内存地址是否是同一个对象。注意a b为真时a is b不一定为真。is主要用于和None的单例比较如x is None。4. 序列类型通用操作切片[start:stop:step]生成新对象支持负索引。列表、元组、字符串都适用。5. 字典与集合的键限定为什么列表不能做键因为列表可变哈希值会变而字典按哈希查找。可变对象一改内容哈希值变了就找不到了。只有不可变类型才能哈希。三、数据类型、特点与应用场景数据类型的选择直接决定了程序的效率、安全性和可读性。1. 不可变类型整数int核心场景所有计数、索引、循环控制。高精度计算如金融、密码学中Python 的无限精度int是天然优势不用担心溢出。浮点数float核心场景科学计算、图形渲染、机器学习中的权重和概率等。但绝不用于精确的金融计算金额应用Decimal或用整数按“分”来存。字符串str核心场景数据处理的核心。配置文件解析、自然语言处理、网络爬虫的数据清洗、日志格式化输出。元组tuple核心场景函数返回多值return x, y本质上就是返回一个元组。字典的键如用(x, y)表示坐标作为键。不可变的数据记录如存储一行数据库记录防止意外修改。2. 可变类型列表list核心场景通用动态容器存储同质或异质的元素序列是迭代、排序、过滤等操作的首选。实现栈与队列append()和pop()可实现栈配合collections.deque可实现高效队列。列表推导式优雅地生成新列表如[x*2 for x in range(10)]。字典dict核心场景快速查找/映射如缓存、数据库查询结果的封装。计数collections.Counter是其子类专用于统计词频等。JSON 交互Python 字典与 JSON 对象天然对应是 Web API 开发的基石。集合set核心场景快速去重一行list(set(data))搞定。成员关系检查判断一个元素是否在大量数据中set的 O(1) 查找远超列表的 O(n)。集合运算求共同好友、交集、差集等代码简洁高效。四、选择决策与进阶关联如何选择数据顺序重要吗重要且有修改 →列表list重要但不修改 →元组tuple需要快速查值吗是有唯一键 →字典dict是只关心元素在不在 →集合set数据需要修改吗是且顺序不重要、元素不重复 →集合set是且顺序重要 →列表list进阶关联生成器generator当数据量极大如处理一个超大日志文件不适合一次性加载到列表时生成器可以惰性地一个一个产出数据几乎不占内存。命名元组namedtuple当需要不可变的数据记录又想像对象一样用.name访问属性时它是元组的绝佳替代品可读性远超普通元组。不可变集合frozenset集合版元组可哈希可作为字典的键。