1. 生成器
1. 定义
根据指定的规则循环生成数据,当条件不成立时,则生成数据结束。数据不是一次性全部生成处理,而是使用一个生成一个,可以节约大量的内存。
2. 创建方式
- 生成器推导式(简单算法生成)
my_generator = (value * 2 for value in range(3)) # for循环内部循环调用next函数获取生成器这种的下一值,当出现异常for循环内部自动进行了异常捕获。 for value in my_generator: print(value) # 输出结果 0 2 4 - yield关键字(复杂算法生成)
def my_generator(): for i in range(3): # 当程序执行到yield关键字的时候代码暂停并把结果返回,再次启动生成器的时候会在暂停的位置继续往下 执行。 yield i for value in my_generator(): print(value) # 输出结果 0 1 2
2. 浅拷贝
1. 定义
copy函数是浅拷贝,只对可变类型的第一层对象进行拷贝,对拷贝的对象开辟新的内存空间进行存储,不会拷贝对象内部的子对象。对于不可变类型进行浅拷贝实际上是对引用的一个拷贝,两个变量指定的是一个内存地址。
2. 示例
import copy
lstNum1 = [1, 2, 3, [4, 5, 6]]
lstNum2 = copy.copy(lstNum1)
print("lstNum1-id: ", id(lstNum1))
print("lstNum2-id: ", id(lstNum2))
print("lstNum1[3]-id: ", id(lstNum1[3]))
print("lstNum2[3]-id: ", id(lstNum2[3]))
# 输出结果
lstNum1-id: 1219129264256
lstNum2-id: 1219130817728
lstNum1[3]-id: 1219129265024
lstNum2[3]-id: 1219129265024
3. 深拷贝
1. 定义
deepcopy函数是深拷贝,只要发现对象有可变类型就会对该对象到最后一个可变类型的每一层对象进行拷贝,对每一层拷贝的对象都会开辟新的内存空间进行存储。
2. 示例
import copy
lstNum1 = [1, 2, 3, [4, 5, 6]]
lstNum2 = copy.deepcopy(lstNum1)
print("lstNum1-id: ", id(lstNum1))
print("lstNum2-id: ", id(lstNum2))
print("lstNum1[1]-id: ", id(lstNum1[1]))
print("lstNum2[1]-id: ", id(lstNum2[1]))
print("lstNum1[3]-id: ", id(lstNum1[3]))
print("lstNum2[3]-id: ", id(lstNum2[3]))
# 输出结果
lstNum1-id: 2008661383360
lstNum2-id: 2008662932608
lstNum1[1]-id: 140736057169600
lstNum2[1]-id: 140736057169600
lstNum1[3]-id: 2008661384448
lstNum2[3]-id: 2008662929536
4. 浅拷贝和深拷贝的区别
- 浅拷贝最多拷贝对象的一层
- 深拷贝可能拷贝对象的多层
理解生成器与拷贝技术
本文深入探讨了Python中的生成器概念,包括其定义、创建方式及应用场景,并详细对比了浅拷贝与深拷贝的区别,通过实例解析了两者在处理复杂数据结构时的行为差异。
9万+

被折叠的 条评论
为什么被折叠?



