一、基础数据类型与语法
1. 列表 (List) 和元组 (Tuple) 的区别?
- 列表:可变对象,可修改/增删元素,占用内存稍大。
- 元组:不可变对象,创建后不可修改,占用内存小。可作为字典的键 (Key)。
2. 深拷贝 (deepcopy) 和浅拷贝 (copy) 的区别?
- 浅拷贝:只拷贝父对象,不拷贝内部嵌套的子对象(子对象依然是引用)。
- 深拷贝:递归拷贝所有层级的对象,完全独立,修改互不影响。
3. is 和 == 的区别?
is:比较的是内存地址(即id()是否相同)。==:比较的是值内容是否相等。
4. 谈谈 Python 的变量查找顺序(LEGB 规则)? 变量查找按顺序依次是:
- L (Local):局部作用域(函数内)。
- E (Enclosing):嵌套父级函数的局部作用域(闭包外层)。
- G (Global):全局作用域(模块级别)。
- B (Built-in):内置作用域(如
len,int等)。
二、进阶与高级特性
5. 什么是装饰器 (Decorator)?
- 本质:是一个闭包函数。
- 作用:在不修改原函数代码和调用方式的前提下,为原函数动态增加额外功能(如:登录校验、日志记录、耗时统计)。
6. 迭代器 (Iterator) 和生成器 (Generator) 的区别?
- 迭代器:实现了
__iter__()和__next__()方法的对象。 - 生成器:特殊的迭代器。通过
yield关键字返回值,按需每次生成一个值,而不是一次性把所有数据加载到内存,极大节省内存。
7. 什么是闭包 (Closure)? 满足三个条件即为闭包:
- 存在函数嵌套。
- 内部函数引用了外部函数的变量。
- 外部函数返回了内部函数的引用。
8. *args 和 **kwargs 是什么?
*args:接收不定数量的位置参数,打包成一个元组 (tuple)。**kwargs:接收不定数量的关键字参数,打包成一个字典 (dict)。
三、面向对象 (OOP)
9. __init__ 和 __new__ 的区别?
__new__:是静态方法,负责类的实例对象。先执行。

