1. 生成式
f = [x ** 2 for x in range(1, 20)]
print(sys.getsizeof(f)) # 查看对象占用内存的字节数
print(f)
结果
2. 生成器
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 查看对象占用内存的字节数
print(f)
结果
可以总结出二者的区别
- 生成式用中括号,生成器用小括号()
- 生成式创建列表之后已经准备好元素,因此需要较多内存空间,而生成器每次需要数据的时候通过内部运算得到数据,因此内存空间占用较小(需花费额外时间)
- 生成式创建的是一个列表,而生成器创建的是一个对象