Python常见面试题及解答总结

liftword12小时前技术文章3

以下是 Python 常见的面试题及简要答案示例,覆盖基础语法、数据结构、算法和高级特性等方向:

一、Python 基础

  1. Python 中可变(Mutable)和不可变(Immutable)数据类型有哪些?

O 不可变:int, float, str, tuple, bool, frozenset

O 可变:list, dict, set, bytearray

  1. 列表(List)和元组(Tuple)的区别?

O 列表可变,元组不可变;

O 列表用 [],元组用 ()

O 元组适合存储固定数据(如配置项),性能略优。

  1. 解释装饰器(Decorator)的作用,写一个记录函数执行时间的装饰器。

python

import time

def timer_decorator(func):

def wrapper(*args, **kwargs):

start = time.time()

result = func(*args, **kwargs)

print(f"{func.__name__} 执行时间: {time.time() - start:.2f}秒")

return result

return wrapper


@timer_decorator

def my_function():

time.sleep(1)

  1. 生成器(Generator)和迭代器(Iterator)的区别?

O 生成器是迭代器的一种,通过 yield 关键字实现,惰性计算,节省内存;

O 迭代器需实现 __iter____next__ 方法。

  1. 解释 GIL(Global Interpreter Lock)及其影响。

O GIL 是 CPython 解释器的全局锁,同一时刻仅一个线程执行 Python 字节码;

O 导致多线程无法充分利用多核 CPU,适合 I/O 密集型任务,计算密集型建议用多进程。


二、数据结构与算法

  1. 如何去除列表中的重复元素并保持顺序?

python

def remove_duplicates(lst):

seen = set()

return [x for x in lst if not (x in seen or seen.add(x))]

  1. 反转字符串(如 "hello" → "olleh")。

python

s = "hello"

reversed_s = s[::-1]

  1. 找出列表中重复的元素(时间复杂度 O(n))。

python

from collections import Counter

def find_duplicates(lst):

return [k for k, v in Counter(lst).items() if v > 1]

  1. 快速排序实现。

python

def quick_sort(arr):

if len(arr) <= 1:

return arr

pivot = arr[len(arr) // 2]

left = [x for x in arr if x < pivot]

middle = [x for x in arr if x == pivot]

right = [x for x in arr if x > pivot]

return quick_sort(left) + middle + quick_sort(right)


三、面向对象编程

  1. 类变量和实例变量的区别?

O 类变量由所有实例共享,实例变量属于特定实例。

  1. 实现单例模式(Singleton)。

python

class Singleton:

_instance = None

def __new__(cls):

if not cls._instance:

cls._instance = super().__new__(cls)

return cls._instance

  1. 魔术方法 __str__ 和 __repr__ 的区别?

O __str__ 用于用户友好的字符串表示(如 print(obj));

O __repr__ 用于开发者调试,应明确对象信息。


四、高级特性

  1. 深拷贝(Deep Copy)和浅拷贝(Shallow Copy)的区别?
  2. 浅拷贝(copy.copy())复制顶层对象,引用嵌套对象;
  3. 深拷贝(copy.deepcopy())递归复制所有对象。
  4. 闭包(Closure)是什么?写一个例子。

python

def outer_func(x):

def inner_func(y):

return x + y

return inner_func

closure = outer_func(10)

print(closure(5)) # 输出 15


五、编码题示例

  1. 斐波那契数列生成器:

python

def fibonacci(n):

a, b = 0, 1

for _ in range(n):

yield a

a, b = b, a + b

  1. 检查括号是否匹配:

python

def is_valid_parentheses(s):

stack = []

mapping = {')': '(', '}': '{', ']': '['}

for char in s:

if char in mapping:

top = stack.pop() if stack else '#'

if mapping[char] != top:

return False

else:

stack.append(char)

return not stack


六、其他常见问题

  1. Python 的垃圾回收机制(引用计数 + 分代回收)。
  2. 多进程 vs 多线程的应用场景。
  3. Django 和 Flask 的核心区别?
  4. Python 3.8+ 的新特性(如海象运算符 :=,位置参数 /)。

面试时需结合具体场景灵活回答,建议通过实际项目经验举例说明。

相关文章

Python垃圾回收机制详解

Python 的垃圾回收机制结合了引用计数和分代回收,确保内存高效管理并处理循环引用问题。以下是其核心机制的分步解释:1. 引用计数(Reference Counting)原理:O 每个对象维护一个引...

python的垃圾回收机制:内存管理的幕后英雄

一、什么是垃圾回收机制?在Python程序运行过程中,会不断创建各种对象,如列表、字典、类实例等。当这些对象不再被使用时,就成了 “垃圾”,占用的内存空间需要被释放,以便后续程序使用。垃圾回收机制(G...

Python垃圾回收:循环引用检测算法实现

Python内存管理的核心是自动垃圾回收机制,它使开发者能够专注于业务逻辑而无需手动管理内存。Python采用引用计数作为基础内存管理方式,每个对象都有一个引用计数器记录指向它的引用数量。当计数为零时...

使用Python实现垃圾分类系统

1 问题如何使用python实现垃圾分类,这里需要创建多个系统。2 方法在python中实现垃圾分类,需要创建多个系统,整体设计思路垃圾分类学习器包含了学习模块和测试模块两部分,用户可以根据需求对垃圾...

新手学Python避坑,学习效率狂飙! 十八、Python 内存管理

Python 的内存管理系统是一个复杂但高效的机制,以下是对其的一些分享。内存管理机制对象的创建与分配:Python 中一切皆对象,当创建一个对象时,例如x = 5,解释器会在内存中为整数对象5分配空...