这份清单精选了 50 道 Python 高频面试题,覆盖从基础语法到底层原理的完整知识体系。为了方便分阶段复习,题目按难度划分为三个梯度,适合后端、数据分析及 AI 方向求职者系统准备。
1–20 基础 & 必知必会
-
Python 中列表和元组的区别?什么时候用哪个? 列表可变(mutable),元组不可变(immutable);列表用
[],元组用()。元组可作为 dict 键、函数多返回值;列表适合动态增删,元组适合固定结构或常量。 考察:可变性、内存、哈希性 -
*args和**kwargs是什么?有什么用?*args收集位置参数成元组,**kwargs收集关键字参数成字典。常用于函数装饰器、灵活接口、继承super().__init__()。 追问:写一个接受任意参数的函数 -
Python 中
==和is的区别?==比较值,is比较身份(id)。小整数/字符串有缓存机制,-5~256 整数、部分字符串is为 True。 高频追问:a = 257; b = 257; a is b结果? -
浅拷贝和深拷贝的区别?如何实现? 浅拷贝只复制第一层(
copy.copy/ 切片),深拷贝递归复制所有层(copy.deepcopy)。嵌套可变对象时深拷贝才真正独立。 代码:import copy; b = copy.deepcopy(a) -
Python 中可变对象和不可变对象有哪些? 不可变:int、float、str、tuple、frozenset、bytes 可变:list、dict、set、bytearray、自定义类(未重写
__hash__等) -
range()和xrange()的区别?(Python2 vs 3) Python3 中range()就是 Python2 的xrange(),返回迭代器,内存友好;Python2range()返回列表。 -
Python 中
pass、break、continue的作用?pass占位符(空函数/类);break跳出当前循环;continue跳过本次循环进入下一次。 -
什么是 duck typing? 鸭子类型——'如果它走路像鸭子,叫声像鸭子,那么它就是鸭子'。关注行为而非类型,常用于协议/魔术方法。
-
__init__和__new__的区别?__new__是静态方法,先创建实例(返回 cls 的实例),__init__初始化已创建的实例。通常只重写__init__,单例模式才重写__new__。 -
Python 中
@staticmethod、@classmethod、@property区别?staticmethod无隐式参数;classmethod第一个参数是cls; 把方法伪装成属性(getter/setter/deleter)。

