python生成器与协程深度剖析
生成器
生成器是一种特殊的迭代器,它可以在需要时才产生值,而不是一次性将所有值加载到内存中。
传统列表 vs 生成器对比
def memory_comparison():import sys# 列表推导式 - 占用大量内存list_comp = [x**2 for x in range(1000000)]print(f"列表占用内存: {sys.getsizeof(list_comp)} bytes")# 生成器表达式 - 内存友好gen_exp = (x**2 for x in range(1000000))print(f"生成器占用内存: {sys.getsizeof(gen_exp)} bytes")return list_comp, gen_exp# 运行对比
list_data, gen_data = memory_comparison()
列表推导式
代码中列表推导式一次性生成了100万个元素的平方,并将所有结果存储在内存中sys.getsizeof
函数显示列表对象占用的内存大小,通常会非常大因为它包含了所有元素的实际数据。
生成器表达式
生成器表达式是惰性求值的,它不会一次性生成所有元素,而是按需计算每个元素sys.getsizeof
显示的内存占用非常小,仅为生成器对象本身的开销,不包含元素数据。