Python 最常考的面试题(2026 最新版) 🔥
以下是我根据 2025-2026 年各大公司(阿里、腾讯、字节、美团、Google 等)真实面经和热门题库汇总的 高频 Python 面试题。分为 基础 / 中级 / 高级 三个级别,覆盖 90%+ 面试中会出现的知识点。
每题都附带简洁答案 + 详细解析 + 代码示例,帮助你不仅“背”下来,还能真正理解“为什么”。
一、Python 基础(初级 / 必考,占 40%)
- Python 和其他语言(如 Java、C++)有什么区别?
Python 是解释型、动态类型、高层次语言,代码简洁、可读性强。
- 解释型:边解释边执行,无需编译。
- 动态类型:变量无需声明类型。
- 缺点:运行速度较慢(有 GIL)。
解析:Python 强调开发效率,适合 Web、数据分析、自动化;Java/C++ 强调性能和静态检查。
- Python2 和 Python3 的主要区别?
- 打印:
print "hello"(Py2) vsprint("hello")(Py3 函数)。 - 整数除法:
5/2=2(Py2) vs2.5(Py3)。 - 字符串:Py2 有 Unicode 和 str;Py3 统一为 str(Unicode),bytes 单独。
- xrange → range(Py3 range 是生成器)。
- 编码默认:Py3 为 UTF-8。
- 列表(list)和元组(tuple)的区别?
- list:可变、可修改,支持增删改。
- tuple:不可变,占用内存更少,更安全(作为 dict key)。
解析:tuple 常用于函数多返回值、固定配置。
- 深拷贝和浅拷贝的区别?
import copy
a = [1, [2, 3]]
b = a.copy() # 浅拷贝
c = copy.deepcopy(a) # 深拷贝
浅拷贝:只拷贝第一层,嵌套对象仍是引用。
深拷贝:递归拷贝所有层。
解析:修改嵌套列表时,浅拷贝会相互影响。
- is 和 == 的区别?
==:比较值是否相等。is:比较内存地址(id())是否相同。
小整数池(-5~256)和字符串驻留会让is有时为 True。
二、Python 中级(高频核心,占 35%)
- GIL(全局解释器锁)是什么?对多线程有何影响?
GIL 是 CPython 解释器中的一把锁,保证同一时刻只有一个线程执行 Python 字节码。
- CPU 密集型任务:多线程几乎无加速(甚至更慢)。
- IO 密集型任务:释放 GIL,可发挥并发优势。
解决方案:多进程(multiprocessing)、C 扩展、asyncio。
- 装饰器(Decorator)的工作原理?手写一个?
装饰器本质是闭包 + 高阶函数,在不修改原函数代码的情况下增强功能。
def timer(func):
def wrapper(*args, **kwargs):
import time
start = time.time()
result = func(*args, **kwargs)
print(f"耗时: {time.time()-start:.2f}s")
return result
return wrapper
@timer
def slow_func():
time.sleep(1)
解析:@timer 等价于 slow_func = timer(slow_func)。
- 闭包(Closure)是什么?有什么作用?
内部函数引用外部函数的变量,即使外部函数执行完毕,内部函数仍能访问这些变量。
作用:数据隐藏、函数工厂、装饰器基础。
示例:计数器函数。 - 迭代器(Iterator)和生成器(Generator)的区别?
- 迭代器:实现了
__iter__()和__next__()的对象(如 list、file)。 - 生成器:用
yield创建的迭代器,惰性计算,节省内存。
def gen():
yield 1
yield 2
g = gen() # 生成器对象
- Python 内存管理机制?
- 引用计数(主要):每个对象有 refcount,计数为 0 时回收。
- 垃圾回收(GC):处理循环引用(分代回收 + 标记-清除)。
- 内存池(PyMalloc):小对象复用内存块,提高效率。
解析:避免循环引用或使用weakref。
三、Python 高级(中高级岗位,占 25%)
- Python 多线程、多进程、协程的区别及适用场景? 类型 资源开销 适用场景 并行能力 多线程 小 IO 密集 受 GIL 限制 多进程 大 CPU 密集 真正并行 协程 极小 高并发 IO(如爬虫、Web) 单线程高并发 协程用
asyncio + async/await实现。 - @staticmethod、@classmethod、@property 的区别?
- staticmethod:静态方法,不需要 self/cls,可直接类调用。
- classmethod:类方法,第一个参数是 cls(类本身)。
- property:把方法变成属性,支持 getter/setter/deleter。
- 上下文管理器(with 语句)原理?如何自定义?
实现了__enter__()和__exit__()的对象。
常用于文件、数据库连接、锁的自动释放。class MyContext: def __enter__(self): print("进入") return self def __exit__(self, exc_type, exc_val, exc_tb): print("退出,清理资源") - **Python 中 *args 和 *kwargs 的作用?*
*args:接收任意数量的位置参数 → tuple。**kwargs:接收任意数量的关键字参数 → dict。
常用于函数包装、装饰器。 - 如何实现一个单例模式?(至少 3 种方式)
- 使用
__new__ - 使用装饰器
- 使用模块(最 Pythonic)
- metaclass
- 使用
其他高频补充题(2026 仍热门)
- PEP8 规范有哪些核心要点?
- 列表推导式 vs 生成器表达式(内存差异)?
__init__和__new__的区别?- 描述符(Descriptor)是什么?(property 底层)
- 如何处理大文件读取(不一次性加载内存)?
- Python 的异常处理机制(try/except/else/finally)?
- async/await 与协程的关系?
- 排序算法:Python 的
sorted()和list.sort()用的是什么?(Timsort,稳定 O(n log n))
面试Tips(非常实用):
- 基础题:一定要能手写代码 + 说出原理。
- 中级题(GIL、装饰器、生成器):面试官最爱深挖“为什么这样设计”。
- 高级题:结合项目经验回答(如“在爬虫项目中我用协程把并发从 100 提到 5000+”)。
- 准备好反问:项目中遇到的性能问题如何用 Python 优化?
- 手写题常见:两数之和、斐波那契、装饰器、单例、异步爬虫等。
想怎么练习?
回复以下任意内容,我立刻给你对应内容:
- “给我第 1-5 题详细代码 + 变体题”
- “出 10 道手写代码题(带答案)”
- “高级专题:GIL + 并发详解”
- “Django/Flask/FastAPI 面试题”
- “数据科学方向(pandas、numpy)面试题”
- “我有 XX 项目经验,帮我准备项目相关问题”
或者直接说“全部出解析版” 或 “针对字节/阿里面试”。
通关后 我还可以给你模拟真实面试(我当面试官,你回答我追问)。
准备好了吗?开始刷题吧!💪
你现在想先看哪部分?