Python常见面试题汇总_高频考点解析

2次阅读

Python常见面试题汇总_高频考点解析

python面试重点不在背题,而在理解底层逻辑和实际应用边界。高频问题看似零散,实则围绕语言特性、内存行为、并发模型、函数式工具和对象模型这五个核心展开。

可变与不可变:不只是能不能改

列表能增删改,元组不能——这是表层认知。真正关键的是它们在函数传参、字典键、内存共享上的连锁反应:

  • 元组可作为字典的键,列表不行,因为哈希值必须稳定
  • 函数默认参数若用列表,多次调用会累积修改(因是同一对象);用元组或None+内部新建则安全
  • 赋值语句如 a = b引用传递,对列表操作会影响原对象;但对元组重新赋值(a = (4,5))只是换了个引用,不改变原元组

深拷贝 vs 浅拷贝:嵌套结构才是分水岭

浅拷贝只复制顶层,内部嵌套对象仍共用;深拷贝递归复制所有层级。判断是否需要深拷贝,看数据结构里有没有嵌套的可变对象:

  • 浅拷贝适用场景:纯数字列表、字符串元组、嵌套中全是不可变对象
  • 深拷贝必要场景:含嵌套列表、字典、自定义类实例等,比如配置字典带子项、树形结构数据
  • 注意:深拷贝性能开销大,循环引用时需靠copy模块自动处理,无需手动干预

is 和 ==:身份与值的严格区分

== 比较值,受 __eq__ 方法控制;is 比较内存地址,无法重写。常见误判点:

立即学习Python免费学习笔记(深入)”;

  • 小整数(-5 到 256)和短字符串常驻内存,a is b 可能为 True,但这是实现细节,不能依赖
  • if x == None 应写成 if x is None,避免类重载了 __eq__ 导致意外结果
  • 函数返回空列表 [] 或空字典 {},用 if not data: 判断真假性更安全,而非 is

Filter / map / Lambda:别只记得语法

Python 3 中 filter 和 map 都返回迭代器,不立即计算。这意味着:

  • 多次遍历会失效,需转 list 或重新调用
  • 配合 lambda 使用时,优先考虑可读性:简单条件用 lambda,复杂逻辑直接写函数
  • filter(None, seq) 是惯用法,过滤掉所有 falsy 值(0None[] 等),比写 lambda 更简洁

GIL 与线程:不是“不能用”,而是“用在哪”

GIL 不是缺陷,是 CPython 的设计权衡。它限制的是 CPU 密集型任务的并行,但对 I/O 操作天然友好:

  • 文件读写、网络请求、数据库查询期间,GIL 会释放,此时多线程可并发执行
  • CPU 密集任务(如数值计算、图像处理)应选 multiprocessing 或使用 numba/cython 加速
  • asyncio 在单线程内协程调度,适合高并发 I/O 场景,比 threading 更轻量
text=ZqhQzanResources