我从一些测试中知道下面的代码片段正在按预期工作,但我想知道这里的 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 语句触发 3 次,x 被重新分配给 2。python 是在内部将容器表示为某处的深拷贝,还是迭代器只是简单地内在链接到该容器的内存位置。这样安全吗?通常很好奇幕后发生了什么。
最佳答案
Python 对元素求值一次 (x
) 并获得一个循环遍历的迭代器 (c
)。这就是为什么您的循环没有像您希望的那样只迭代一次。
这里有几个位置可以解释这种行为。
关于您对安全的关注,从您不会弄乱 for
循环的意义上来说,它是安全的。需要注意的是,如果您使用的是可变对象,则 for
循环可能会尝试越过对象的索引(或未到达末尾),如果您要删除数据(或添加数据) ).
关于python - Python for循环中发生的内部操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973057/