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

Python循环中list.append()与list.clear()的异常行为问询

问题原因及解决办法

行为解释

你遇到的问题核心在于Python中列表是可变对象:

  • 你在循环外仅创建了一个smalllist列表对象,每次循环调用smalllist.clear()只是清空该对象内的元素,并没有生成新的列表。
  • 当执行biglst.append(smalllist)时,你并没有把smalllist的当前内容复制进去,而是把这个列表对象的**引用(内存地址)**添加到了biglst中。
  • 这意味着biglst里的10个元素,全都是指向同一个列表对象的"指针"。每次循环修改这个对象的内容(清空后添加新随机数),所有指向它的引用都会同步看到最新内容。所以循环结束后打印biglst,所有元素自然都是最后一次迭代时smalllist的内容。

解决办法

有两种简单的修复方式:

方式一:每次循环创建新列表

把smalllist的定义移到循环内部,每次迭代都生成一个全新的列表对象:

import random as r
def try1():
    biglst = []
    for i in range(10):
        smalllist = []  # 每次循环创建新列表
        smalllist.append(r.randint(1, 10))
        print(smalllist)
        biglst.append(smalllist)
    print("_____________End of for loop__________")
    for i in biglst:
        print(i)
try1()

方式二:添加列表的副本而非原引用

如果需要保留循环外的smalllist定义,可以在append时传入列表的副本,避免复用同一个对象的引用:

import random as r
def try1():
    biglst = []
    smalllist = []
    for i in range(10):
        smalllist.clear()
        smalllist.append(r.randint(1, 10))
        print(smalllist)
        biglst.append(smalllist.copy())  # 添加副本
    print("_____________End of for loop__________")
    for i in biglst:
        print(i)
try1()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:07:43