for循环问题!
""" 问:执行完下面的代码后, l,m的内容分别是什么? """ # def func(m): # for k,v in m.items(): # m[k+2] = v+2 # # # m = {1: 2, 3: 4} # l = m # 浅拷贝 # l[9] = 10 # func(l) # m[7] = 8 # # # print("l:", l) # print("m:", m) # 在迭代一个列表或字典的时候,你不能修改列表或字典的大小!
#为什么在for循环字典或者列表的时候,不能对可迭代系列做增善操作?
我们来看下for循环的原理!!!
for xxx in 可迭代对象
首先:程序调用可迭代对象的__iter__()方法,返回一个迭代器
然后:调用迭代器的__next__()方法,每调用一次,得到迭代器的一个值,赋值给xxx,直到捕获Stopiteration为止,
最后完成迭代,
也就是说,拿到迭代器的时候,可迭代对象的大小已经确定了,所以循环过程中对可迭代对象的增删操作,就会报错!!!