Python面试题(一):5个最常见的Python基础问题

在准备 Python 相关的面试时,有些问题几乎是必会问的题

这些问题虽然基础,但如果回答的不清楚,很容易给面试官留下基础不扎实的印象。

这篇文章整理了 5 道 Python 面试中最常见的基础题,并结合简单的示例进行解释,帮助大家不仅能够回答问题,还能真正的理解背后的原理。

当然,这也仅仅是我个人在准备面试过程中整理出来的题目,如果大家有不同意见,欢迎提出!

一、Python 的主要特点是什么?

简答版

Python 是一种 解释型、动态类型的高级编程语言 ,语法简洁、可读性强,并且拥有丰富的标准库和第三方库,因此开发效率非常高,被广泛应用于 Web开发、数据分析、人工智能、自动化运维等领域

简答版2更精简一些

Python 是一种解释型、动态类型的语言,语法简单,拥有非常丰富的第三方库,因此开发效率比较高。

详细解析

Python 之所以流行,很大程度上来源于它的几个核心特点。

1 解释型语言

Python 是 解释型语言,代码不需要编译成机器码再执行,而是由解释器逐行执行。

例如:

python 复制代码
print("Hello Python")

运行时,Python解释器会直接解释并执行这行代码。

优点:

  • 开发效率高

  • 调试方便

  • 跨平台能力强

缺点:

  • 运行速度通常比编译型语言(如C、C++)慢一些

2 动态类型语言

Python 是 动态类型语言,变量在运行时才确定类型。

例如:

python 复制代码
x = 10 # int
x = "hello" # str

同一个变量可以在不同时间指向不同类型的数据。

优点:

  • 编码更加灵活

  • 不需要声明变量类型

缺点:

  • 容易产生类型错误

  • 大型项目需要良好的代码规范


3 语法简单,可读性强

Python 的设计哲学之一是:

代码应该像自然语言一样容易理解

例如对比 Python 和 Java:

python 复制代码
for i in range(5):
    print(i)
java 复制代码
for(int i=0;i<5;i++){
    System.out.println(i);
}

可以明显看出 Python 更简洁。


4 丰富的标准库和第三方库

Python 生态非常强大,例如:

常见库:

  • 数据分析:pandas

  • 科学计算:numpy

  • 机器学习:scikit-learn

  • 深度学习:tensorflowpytorch

  • 爬虫:requestsscrapy

  • Web开发:djangoflask

因此 Python 也被称为:

"胶水语言(Glue Language)"

因为它可以把各种系统快速连接起来。


二、Python 列表(List)和元组(Tuple)的区别

这是 Python 面试中 非常高频的问题

简答版

Python 中:

类型 是否可变
List 可变
Tuple 不可变

列表可以修改元素,而元组创建后不能修改。


详细解析

1 List(列表)

列表是 可变序列

python 复制代码
a = [1, 2, 3]
a[0] = 100

print(a)

#输出 [100, 2, 3]

列表支持很多操作:

  • 增加

  • 删除

  • 修改

  • 排序


2 Tuple(元组)

元组是 不可变序列

python 复制代码
t = (1, 2, 3)

t[0] = 100

# 运行报错 TypeError: 'tuple' object does not support item assignment

因为元组创建后 元素不能被修改


为什么需要 Tuple?

很多人刚学 Python 时会问:

既然 list 可以用,为什么还要 tuple?

主要原因有三个。

1 、Tuple 更安全

不可变意味着:

  • 数据不会被意外修改

例如:

python 复制代码
config = ("127.0.0.1", 3306)

2 、Tuple 速度更快

因为 tuple 不可变,所以 Python 可以进行一些优化。

一般来说:

tuple 的访问速度会略快于 list


3 、Tuple 可以作为字典 key

Python 字典要求 key 必须是可哈希(hashable)的

list 不行:

python 复制代码
d = {[1,2]: "hello"} # 报错

tuple 可以:

python 复制代码
d = {(1,2): "hello"} # 可行

三、Python 深拷贝和浅拷贝

在 Python 中,变量本质上是 对象的引用

因此复制对象时,需要区分:

  • 浅拷贝

  • 深拷贝

简答版

浅拷贝:

只复制对象本身,但内部对象仍然共享引用。

深拷贝:

递归复制整个对象结构。


浅拷贝示例

python 复制代码
import copy

a = [[1,2], [3,4]]
b = copy.copy(a)

b[0][0] = 100

print(a)

# 输出:

# [[100, 2], [3, 4]]

原因:

  • 外层列表被复制

  • 内层列表仍然共享引用


深拷贝示例

python 复制代码
import copy

a = [[1,2], [3,4]]
b = copy.deepcopy(a)

b[0][0] = 100

print(a)

# 输出:

# [[1, 2], [3, 4]]

深拷贝会 完全复制所有层级的数据结构


总结对比

类型 复制对象 复制子对象
浅拷贝
深拷贝

四、Python 的 GIL 是什么?

这是 Python 面试中 非常经典的问题

简答版

GIL(Global Interpreter Lock)是 Python 的全局解释器锁

它保证在同一时刻 只有一个线程执行 Python 字节码


为什么需要 GIL?

Python 使用 引用计数机制进行内存管理

例如:

python 复制代码
a = []
b = a

对象的引用计数会增加。

如果多个线程同时修改引用计数,就可能产生:数据竞争、内存错误

因此 Python 通过 GIL 保证线程安全。


GIL 的影响

GIL 会影响 多线程的并行能力

CPU密集型任务

例如:大量计算、数学运算

多线程无法利用多核 CPU。

解决方案:

使用 多进程 multiprocessing


IO密集型任务

例如:网络请求、文件读写

线程在等待 IO 时会释放 GIL,因此:多线程仍然有效

常见场景:爬虫、Web服务器


五、Python 字典为什么这么快?

Python 字典是 使用频率非常高的数据结构

简答版

Python 字典底层使用 哈希表(Hash Table)实现

通过 key 的 hash 值直接定位存储位置,因此查找复杂度接近 O(1)


字典查找过程

当执行:

python 复制代码
d["name"]

大致步骤是:

1 计算 key 的 hash 值

2 根据 hash 值计算数组索引

3 找到对应位置的数据

因此查找非常快。


示例

python 复制代码
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 c

2 、字典扩容机制

当哈希表使用率过高时,Python 会:

  • 自动扩容

  • 重新计算索引

以保证查找效率。

相关推荐
宝贝儿好4 小时前
【强化学习实战】第十一章:Gymnasium库的介绍和使用(1)、出租车游戏代码详解(Sarsa & Q learning)
人工智能·python·深度学习·算法·游戏·机器学习
程序媛一枚~7 小时前
✨✨✨使用Python,OpenCV及图片拼接生成❤️LOVE❤️字样图,每张小图加随机颜色边框,大图加随机大小随机颜色边框
图像处理·python·opencv·numpy·图像拼接
MediaTea8 小时前
Python:collections.Counter 常用函数及应用
开发语言·python
如若1238 小时前
flash-attn 安装失败?从报错到成功的完整排雷指南(CUDA 12.8 + PyTorch 2.7)
人工智能·pytorch·python
007张三丰8 小时前
知乎高赞回答爬虫:从零开始,建立你的专属知识库
爬虫·python·知识库·python爬虫·知乎·高赞回答
LawrenceLan8 小时前
37.Flutter 零基础入门(三十七):SnackBar 与提示信息 —— 页面反馈与用户交互必学
开发语言·前端·flutter·dart
李昊哲小课8 小时前
Python json模块完整教程
开发语言·python·json