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

遍历列表时修改列表长度为何出现不同执行结果?

两段遍历修改列表代码的差异原因

这俩代码的核心区别在于:修改的是同一个列表对象,还是让变量指向了新的列表对象,而Python的for循环迭代器是绑定在最初的列表对象上的,不是绑定在变量上。

第一段代码分析

numbers = [1,2]
for i in numbers :
    if len(numbers)<3:
        numbers.append(3)
    print(i)
  • 循环开始前,numbers指向列表对象[1,2],for循环会先获取这个对象的迭代器。
  • 第一次循环取到i=1,此时列表长度是2,执行append(3)——这是在原列表对象上直接添加元素,原列表变成[1,2,3]。
  • 迭代器会顺着原列表继续遍历,第二次取到i=2,此时列表长度已经是3,不执行append,打印2。
  • 因为原列表现在有3个元素,迭代器继续取第三个元素i=3,打印3。最终输出1、2、3。

第二段代码分析

numbers = [1,2]
for i in numbers :
    if len(numbers)<3:
        numbers = [1,2,3]
    print(i)
  • 循环开始前,numbers指向列表对象[1,2],for循环同样获取这个对象的迭代器。
  • 第一次循环取到i=1,此时列表长度是2,执行numbers = [1,2,3]——这是把numbers变量重新指向了一个全新的列表对象,但最初的[1,2]列表并没有消失,迭代器还是绑定在那个旧列表上。
  • 迭代器继续遍历旧列表的第二个元素i=2,打印2。旧列表只有两个元素,迭代器遍历完毕,循环直接结束。新的[1,2,3]列表根本没被迭代到,所以只输出1、2。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:45:34