Python——50道面试题,面试巩固必看,建议收藏!

以下是 2026年最新版 Python 面试题精选50道(涵盖基础 → 中级 → 高级),适合后端、数据分析、自动化测试、AI 等方向面试准备。建议先自己尝试回答,再对照解析巩固记忆。

我将题目分为三个梯度,便于分阶段复习:

  • 1–20:基础 & 必知必会(社招/校招初筛常见)
  • 21–35:中高级 & 原理向(中高级岗位重点)
  • 36–50:高级 & 底层/性能/设计向(大厂/资深岗位高频)

每题后附简洁答案 + 考察点 + 追问方向,便于深度准备。

1–20 基础 & 必知必会

  1. Python 中列表和元组的区别?什么时候用哪个?
    :列表可变(mutable),元组不可变(immutable);列表用 [],元组用 ();元组可作为 dict 键、函数多返回值;列表适合动态增删,元组适合固定结构/常量/哈希。
    考察:可变性、内存、哈希性
  2. *args**kwargs 是什么?有什么用?
    *args 收集位置参数成元组,**kwargs 收集关键字参数成字典;常用于函数装饰器、灵活接口、继承 super().init()。
    追问:写一个接受任意参数的函数
  3. Python 中 ==is 的区别?
    == 比较值,is 比较身份(id)。小整数/字符串有缓存机制,-5~256 整数、部分字符串 is 为 True。
    高频追问a = 257; b = 257; a is b 结果?
  4. 浅拷贝和深拷贝的区别?如何实现?
    :浅拷贝只复制第一层(copy.copy / 切片),深拷贝递归复制所有层(copy.deepcopy)。嵌套可变对象时深拷贝才真正独立。
    代码import copy; b = copy.deepcopy(a)
  5. Python 中可变对象和不可变对象有哪些?
    :不可变:int、float、str、tuple、frozenset、bytes
    可变:list、dict、set、bytearray、自定义类(未重写 hash 等)
  6. range()xrange() 的区别?(Python2 vs 3)
    :Python3 中 range() 就是 Python2 的 xrange(),返回迭代器,内存友好;Python2 range() 返回列表。
  7. Python 中 passbreakcontinue 的作用?
    :pass 占位符(空函数/类);break 跳出当前循环;continue 跳过本次循环进入下一次。
  8. 什么是 duck typing?
    :鸭子类型——“如果它走路像鸭子,叫声像鸭子,那么它就是鸭子”。关注行为而非类型,常用于协议/魔术方法。
  9. __init____new__ 的区别?
    __new__ 是静态方法,先创建实例(返回 cls 的实例),__init__ 初始化已创建的实例。通常只重写 __init__,单例模式才重写 __new__
  10. Python 中 @staticmethod@classmethod@property 区别?
    :staticmethod 无隐式参数;classmethod 第一个参数是 cls;property 把方法伪装成属性(getter/setter/deleter)。
  11. Python 中的 GIL 是什么?对多线程有何影响?
    :全局解释器锁(Global Interpreter Lock)。同一时刻只有一个线程执行 Python 字节码。CPU 密集型任务多线程不加速,IO 密集型仍受益。
  12. Python 中常见的内存管理机制?
    :引用计数 + 分代垃圾回收(gc 模块)。小对象池(-5~256 整数、部分字符串)。
  13. isinstance()type() 的区别?
    isinstance(obj, (list, tuple)) 支持元组判断继承关系;type(obj) 只返回确切类型。
  14. Python 中列表推导式、字典推导式、生成器表达式写法?
    [x**2 for x in range(10)] # 列表 {x: x**2 for x in range(10)} # 字典 (x**2 for x in range(10)) # 生成器
  15. try...except...else...finally 中 else 和 finally 的执行时机?
    :else 只在没有异常时执行;finally 无论是否异常都执行(常用于资源释放)。
  16. Python 中 __slots__ 有什么用?
    :限制实例属性,节省内存(尤其大量小对象时),禁止 __dict__
  17. Python 中的命名空间有哪几种?LEGB 规则是什么?
    :Local → Enclosing → Global → Built-in
    查找顺序:局部 → 闭包 → 全局 → 内置
  18. Python 中 nonlocalglobal 的作用?
    :nonlocal 修改外层函数(非全局)的变量;global 修改模块级变量。
  19. Python 中 sort() 和 sorted() 的区别?
    :sort() 是列表方法,原地排序返回 None;sorted() 是内置函数,返回新列表,可作用于任何可迭代对象。
  20. Python 中如何实现单例模式?(至少两种方式)

    方式1:重写 __new__
    方式2:装饰器 / 元类 / 模块导入(最常用)

21–35 中高级 & 原理向

  1. Python 中描述符(Descriptor)是什么?property 底层原理?
    :实现了 __get____set____delete__ 的类。property 就是描述符的简化写法。
  2. Python 中元类(metaclass)是什么?常见使用场景?
    :创建类的类(type 是最常见的元类)。ORM(如 Django Model)、自动注册、属性校验。
  3. Python 中的 MRO(方法解析顺序)是什么?C3 线性化算法?
    :多继承时方法查找顺序。Python3 全用 C3(合并+拓扑排序)。
  4. Python 中 __getattribute____getattr__ 区别?
    __getattribute__ 每次属性访问都调用;__getattr__ 只在普通查找失败时调用。
  5. Python 中生成器和迭代器的区别?如何自定义迭代器?
    :迭代器实现 __iter____next__;生成器是迭代器的简写(yield)。生成器自动实现迭代器协议。
  6. @functools.lru_cache 原理和使用场景?
    :最近最少使用缓存装饰器,常用于递归(如斐波那契)、避免重复计算昂贵函数。
  7. Python 中协程、生成器、async/await 的关系?
    :生成器 → 协程基础;Python 3.5+ 用 async def / await 实现原生协程(基于生成器)。
  8. Python 中 contextmanager 和 with 语句底层原理?
    :实现了 __enter____exit__ 的对象;@contextmanager 装饰器把生成器转为上下文管理器。
  9. Python 中 pickle 和 json 的区别?安全性?
    :pickle 可序列化任意 Python 对象(包括函数、类),但不安全(反序列化可执行代码);json 只支持基本类型,跨语言、安全。
  10. Python 中 __mro____bases____subclasses__() 分别是什么?
    mro 方法解析顺序元组;bases 直接基类元组;subclasses() 当前类的直接子类列表。
  11. Python 中内存泄漏的常见原因?如何排查?
    :循环引用 + 未清理全局变量/缓存;大对象未释放;线程/协程泄漏。
    工具:objgraph、heapy、tracemalloc、gc.get_objects()
  12. Python 中多进程 vs 多线程 vs 多协程适用场景?
    :CPU 密集 → 多进程(multiprocessing);IO 密集 → 多线程/协程(asyncio);混合 → ProcessPoolExecutor + asyncio。
  13. Python 中如何实现异步 IO?常见库?
    :asyncio + aiohttp + aiomysql 等;或 trio/curio。
  14. Python 中常见的 WSGI/ASGI 服务器有哪些?
    :WSGI:gunicorn + uvicorn;ASGI:uvicorn、hypercorn、daphne。
  15. Python 中装饰器带参数怎么写?
    :三层嵌套,最外层接收参数,返回真正的装饰器函数。

36–50 高级 & 底层/性能/设计向

  1. Python 中整数对象在内存中如何存储?大整数如何处理?
    :小整数缓存池;大整数用 ob_digit 数组(30位一组)实现任意精度。
  2. Python 中字符串 intern 机制?
    :编译时常量字符串、部分运行时字符串会 intern(放入 interned 池),相同内容指向同一对象。
  3. Python 中 dict 底层实现?为什么 Python 3.7+ dict 有序?
    :3.6 前 hash table + 开放寻址;3.7+ 插入顺序维护(compact dict + indices 数组)。
  4. Python 中 set 和 dict 的底层数据结构?
    :都是哈希表,set 是 dict 的 value 为 dummy 的特例。
  5. Python 中列表 append 操作的时间复杂度?扩容策略?
    :均摊 O(1);扩容策略:2倍或 1.125 倍(Python 3.3+ 更平滑)。
  6. Python 中如何实现一个高性能的 LRU Cache?
    :collections.OrderedDict + move_to_end();或 functools.lru_cache(maxsize=128)
  7. Python 中如何避免循环导入(circular import)?
    :延迟导入(函数内 import);重构模块;使用 importlib.import_module
  8. Python 中常见的 monkey patch 使用场景?
    :测试 mock、热修复线上 bug、临时修改第三方库行为。
  9. Python 中如何实现一个线程安全的单例?
    :加锁(threading.Lock) + 双检锁;或用模块导入天然单例。
  10. Python 中垃圾回收的阈值机制(generation)?
    :三代:0代(频繁)、1代、2代;阈值可通过 gc.set_threshold() 调整。
  11. Python 中如何调试内存泄漏?
    :tracemalloc + snapshot;objgraph.show_most_common_types();memory_profiler
  12. Python 中 Cython、Numba、PyPy 的区别和适用场景?
    :Cython → 静态编译到 C;Numba → JIT 编译数值计算;PyPy → 解释器带 JIT,全局提速。
  13. Python 中如何实现一个简单的协程调度器?
    :用生成器 + yield + send;或直接用 asyncio 的 event loop。
  14. Python 中常见的反序列化漏洞(pickle RCE)如何防范?
    :永远不要 pickle untrusted data;用 json/yaml/toml;或限制 pickle 的允许类。
  15. 如果让你设计 Python 的包管理工具(pip 的竞品),你会怎么考虑?
    :依赖解析(SAT solver)、锁文件(requirements.txt → poetry.lock)、环境隔离(venv)、缓存、增量安装、跨平台一致性、支持 git/monorepo 等。

建议收藏 & 刷题节奏

  • 第一遍:快速过 1–20,默写关键代码
  • 第二遍:深入 21–35,画图理解 MRO、描述符、GIL
  • 第三遍:重点攻 36–50 + 手写 LRU / 单例 / 上下文管理器
  • 每天 5–10 道 + 代码实现 + 追问准备

祝你面试顺利,拿到心仪 offer!
有想重点讲解/手写代码的题目,评论告诉我~

文章已创建 3958

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部