Python 高频面试题(含详细答案)

Python 中的 GIL 是什么?它如何影响多线程性能?

GIL(Global Interpreter Lock)是 CPython 中的全局解释器锁,它确保任何时刻只有一个线程可以执行 Python 字节码。这使得 Python 多线程在处理 CPU 密集型任务时性能提升有限,但对于 I/O 密集型任务(如网络、文件)依然有效。

Python 中深拷贝与浅拷贝的区别?

浅拷贝仅复制对象本身及其引用的子对象,修改子对象会影响原对象;深拷贝递归复制所有嵌套对象,二者完全独立。使用 copy.copy() 实现浅拷贝,copy.deepcopy() 实现深拷贝。

Python 如何实现协程?

使用 async def 定义协程函数,使用 await 调用异步操作,配合 asyncio 模块实现协程并发。协程适用于高并发网络 I/O 场景。

列表推导式和生成器表达式有何区别?

列表推导式返回一个完整的列表,占用更多内存;生成器表达式返回一个迭代器,惰性求值,占用内存少,适合处理大数据。

Python 装饰器的作用及常见使用场景?

装饰器用于在函数运行前后自动执行额外逻辑,常见场景有:日志记录、权限验证、缓存、计时、事务控制等。

is 和 == 有何不同?

is 比较的是对象的内存地址(是否同一对象);== 比较的是对象的值是否相等。对于整数、字符串等小对象,可能返回相同结果,但语义不同。

Python 内存管理机制是怎样的?

采用引用计数为主,结合标记-清除和分代回收的垃圾回收机制。可以用 gc 模块查看和控制内存管理行为。

如何避免 Python 中的内存泄漏?

避免循环引用、及时释放资源、使用弱引用(weakref)、确保关闭文件句柄和数据库连接。

如何让一个类支持 with 上下文管理?

需要实现 __enter__()__exit__() 方法。with 语句执行时会自动调用这两个方法进行资源管理。

Python 中有哪些常用的内置数据结构?

包括:list(列表)、tuple(元组)、dict(字典)、set(集合),还有 collections 中的 defaultdict、Counter、deque 等扩展结构。