在准备 Python 相关的面试时有些问题几乎是必会问的题。这些问题虽然基础但如果回答的不清楚很容易给面试官留下基础不扎实的印象。这篇文章整理了5 道 Python 面试中最常见的基础题并结合简单的示例进行解释帮助大家不仅能够回答问题还能真正的理解背后的原理。当然这也仅仅是我个人在准备面试过程中整理出来的题目如果大家有不同意见欢迎提出一、Python 的主要特点是什么简答版Python 是一种解释型、动态类型的高级编程语言语法简洁、可读性强并且拥有丰富的标准库和第三方库因此开发效率非常高被广泛应用于Web开发、数据分析、人工智能、自动化运维等领域。简答版2更精简一些Python 是一种解释型、动态类型的语言语法简单拥有非常丰富的第三方库因此开发效率比较高。详细解析Python 之所以流行很大程度上来源于它的几个核心特点。1 解释型语言Python 是解释型语言代码不需要编译成机器码再执行而是由解释器逐行执行。例如print(Hello Python)运行时Python解释器会直接解释并执行这行代码。优点开发效率高调试方便跨平台能力强缺点运行速度通常比编译型语言如C、C慢一些2 动态类型语言Python 是动态类型语言变量在运行时才确定类型。例如x 10 # int x hello # str同一个变量可以在不同时间指向不同类型的数据。优点编码更加灵活不需要声明变量类型缺点容易产生类型错误大型项目需要良好的代码规范3 语法简单可读性强Python 的设计哲学之一是代码应该像自然语言一样容易理解例如对比 Python 和 Javafor i in range(5): print(i)for(int i0;i5;i){ System.out.println(i); }可以明显看出 Python 更简洁。4 丰富的标准库和第三方库Python 生态非常强大例如常见库数据分析pandas科学计算numpy机器学习scikit-learn深度学习tensorflow、pytorch爬虫requests、scrapyWeb开发django、flask因此 Python 也被称为“胶水语言Glue Language”因为它可以把各种系统快速连接起来。二、Python 列表List和元组Tuple的区别这是 Python 面试中非常高频的问题。简答版Python 中类型是否可变List可变Tuple不可变列表可以修改元素而元组创建后不能修改。详细解析1 List列表列表是可变序列。a [1, 2, 3] a[0] 100 print(a) #输出 [100, 2, 3]列表支持很多操作增加删除修改排序2 Tuple元组元组是不可变序列。t (1, 2, 3) t[0] 100 # 运行报错 TypeError: tuple object does not support item assignment因为元组创建后元素不能被修改。为什么需要 Tuple很多人刚学 Python 时会问既然 list 可以用为什么还要 tuple主要原因有三个。1 、Tuple 更安全不可变意味着数据不会被意外修改例如config (127.0.0.1, 3306)2 、Tuple 速度更快因为 tuple 不可变所以 Python 可以进行一些优化。一般来说tuple 的访问速度会略快于 list3 、Tuple 可以作为字典 keyPython 字典要求key 必须是可哈希hashable的。list 不行d {[1,2]: hello} # 报错tuple 可以d {(1,2): hello} # 可行三、Python 深拷贝和浅拷贝在 Python 中变量本质上是对象的引用。因此复制对象时需要区分浅拷贝深拷贝简答版浅拷贝只复制对象本身但内部对象仍然共享引用。深拷贝递归复制整个对象结构。浅拷贝示例import copy a [[1,2], [3,4]] b copy.copy(a) b[0][0] 100 print(a) # 输出 # [[100, 2], [3, 4]]原因外层列表被复制内层列表仍然共享引用深拷贝示例import copy a [[1,2], [3,4]] b copy.deepcopy(a) b[0][0] 100 print(a) # 输出 # [[1, 2], [3, 4]]深拷贝会完全复制所有层级的数据结构。总结对比类型复制对象复制子对象浅拷贝✔✖深拷贝✔✔四、Python 的 GIL 是什么这是 Python 面试中非常经典的问题。简答版GILGlobal Interpreter Lock是Python 的全局解释器锁。它保证在同一时刻只有一个线程执行 Python 字节码。为什么需要 GILPython 使用引用计数机制进行内存管理。例如a [] b a对象的引用计数会增加。如果多个线程同时修改引用计数就可能产生数据竞争、内存错误因此 Python 通过 GIL 保证线程安全。GIL 的影响GIL 会影响多线程的并行能力。CPU密集型任务例如大量计算、数学运算多线程无法利用多核 CPU。解决方案使用多进程 multiprocessing。IO密集型任务例如网络请求、文件读写线程在等待 IO 时会释放 GIL因此多线程仍然有效常见场景爬虫、Web服务器五、Python 字典为什么这么快Python 字典是使用频率非常高的数据结构。简答版Python 字典底层使用哈希表Hash Table实现。通过 key 的 hash 值直接定位存储位置因此查找复杂度接近O(1)。字典查找过程当执行d[name]大致步骤是1 计算 key 的 hash 值2 根据 hash 值计算数组索引3 找到对应位置的数据因此查找非常快。示例d { name: Alice, age: 20 } print(d[name])时间复杂度O(1)哈希冲突如果两个 key 的 hash 值相同就会发生哈希冲突。Python 会通过开放寻址法Open Addressing来寻找新的位置。面试延伸知识Python 字典还有几个重要特点1 、Python3.7 之后字典有序例如d {a:1, b:2, c:3}遍历顺序就是a b c2 、字典扩容机制当哈希表使用率过高时Python 会自动扩容重新计算索引以保证查找效率。