Python for循环期间发生的内部操作
通过一些测试,我知道下面的代码片段工作正常,但我想知道python后端在这里发生了什么Python for循环期间发生的内部操作,python,python-3.x,Python,Python 3.x,通过一些测试,我知道下面的代码片段工作正常,但我想知道python后端在这里发生了什么 for c in curr.getChildren(): if point in c: change = True curr = c 以玩具为例: x = [1,2,3] for c in x: print ('hi') if c == 2: x = 2 print语句激发三次,x被重新分配给2。python是否在内部将容器表示为某个地方的深度副本,或者迭代器只是与该容
for c in curr.getChildren():
if point in c:
change = True
curr = c
以玩具为例:
x = [1,2,3]
for c in x:
print ('hi')
if c == 2:
x = 2
print语句激发三次,x被重新分配给2。python是否在内部将容器表示为某个地方的深度副本,或者迭代器只是与该容器的内存位置内在链接。这安全吗?人们通常很好奇这里幕后发生了什么。Python对元素求值一次(
x
),并得到一个迭代器,它循环使用(c
)。这就是为什么循环不会像您希望的那样只迭代一次
这里有几个地方可以解释这种行为
考虑到您对安全性的关注,它是安全的,因为您不会弄乱
for
循环。需要注意的是,如果您使用的是可变对象,如果您正在删除数据(或添加数据),for
循环可能会尝试通过对象的索引(或不到达末尾)。好的,这正是我所期望的,对于这个应用程序,我可以不中断循环,但我很高兴知道它在我内心的想法中发挥着作用。