You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迭代列表时将其重新赋值为[],为何循环仍会完整执行?

为什么遍历列表时重新赋值为空列表,for循环仍会完整执行?

先看你给出的代码:

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

核心原因是Python的for循环依赖迭代器,且迭代器在循环启动时就已绑定原列表对象,和后续变量的重新赋值无关,具体拆解:

  • 当调用iterate([1,2,3])时,函数参数l最初指向内存中的[1,2,3]列表对象。
  • 进入for x in l循环时,Python会先执行iter(l),把l当前指向的列表转换成一个迭代器。这个迭代器直接绑定的是原[1,2,3]的内存空间,不是变量l本身。
  • 第一次循环取出元素1后,执行l = [],这只是把变量l的指向改成了一个新的空列表对象,但之前创建的迭代器还牢牢绑定着原来的[1,2,3],所以后续循环还能从迭代器里取出2和3。
  • 调试时看到l变成空列表,是因为变量已经指向新对象了,但原列表还被迭代器引用着,只是你没法再通过变量l访问它。

额外补充:如果是直接修改原列表对象(比如l.clear()或者del l[:]),迭代器就会受影响,循环会提前终止——因为这时候修改的是迭代器绑定的那个对象本身,迭代器能感知到内容变化。但你这里是重新赋值变量,相当于换了个新对象给l,和原列表完全没关系了。

内容的提问来源于stack exchange,提问作者barciewicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 13:45:31