Python for循环期间发生的内部操作

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是否在内部将容器表示为某个地方的深度副本,或者迭代器只是与该容

通过一些测试,我知道下面的代码片段工作正常,但我想知道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
循环可能会尝试通过对象的索引(或不到达末尾)。

好的,这正是我所期望的,对于这个应用程序,我可以不中断循环,但我很高兴知道它在我内心的想法中发挥着作用。