【问题标题】:Reassigning a list to [] while iterating it does not stop the loop在迭代时将列表重新分配给 [] 不会停止循环
【发布时间】:2022-10-06 21:51:48
【问题描述】:

尽管将列表重新分配给 [],为什么下面的 for 循环仍然完全执行?

def iterate(l):
    for x in l:
        l = []
        print(x)
        
iterate([1, 2, 3]) # prints 1 2 3

我知道这是一种不好的做法,但我对这种行为背后的“科学”很感兴趣。 在调试器中检查l 变量,我可以看到它变成了[];虽然看不到原版。

  • l = [] 是一个赋值,而不是一个声明。无论如何,它不会影响循环,因为您没有更改原始列表。您正在更改列表来自的变量。这是非常不同的。
  • 循环在任何元素上循环姓名l 指向,然后你改变什么姓名l 指向循环内的[],但这不会改变列表中的循环。

标签: python


【解决方案1】:

这是您的for 循环。

for x in l:
    l = []
    print(x)

基本上相当于这个。

it = iter(l)
try:
    while True:
        x = next(it)
        l = []
        print(x)
except StopIteration:
    pass

当我们点击l = [] 线时,我们不需要变量l 了。我们实际使用的是it,一个指向我们正在迭代的列表的迭代器。实际变量l 是否仍然指向该列表无关紧要,因为我们有自己的变量(我们的迭代器)分别指向它。所以你的重新分配不会影响循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 2012-03-05
    • 1970-01-01
    • 2022-08-18
    • 2018-12-28
    相关资源
    最近更新 更多