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

Python预定义长度嵌套列表赋值后所有元素相同问题求解

问题成因说明
  • Python中列表属于可变对象,使用*运算符对包含可变对象的列表做重复操作时,实际重复复制的是可变对象的内存引用,而非创建新的独立对象。

你写的list_of_list = 4*[3*[0]]会分两步执行:

  1. 先执行3*[0]生成一个子列表[0,0,0],记这个子列表的内存地址为A
  2. 再执行4*[地址A对应的列表],生成包含4个元素的外层列表,这4个元素全部都是指向地址A的引用

这就意味着你修改任意一个子列表的元素,本质都是修改地址A处的内容,所有子列表会同步变化,最终呈现的结果就是所有子列表都等于最后一次循环赋值的结果。

你注释掉的初始化循环可以解决问题的原因是:每次执行list_of_list[y] = [0, 0, 0]时,[0,0,0]都会新创建一个独立的子列表,把外层列表对应位置的引用替换成新子列表的地址,执行完4次循环后,外层列表的4个元素分别指向4个完全独立的子列表,后续修改就不会互相干扰,自然能得到预期结果。

如果要更简洁地初始化独立嵌套列表,可以直接用列表推导式规避引用重复问题:

list_of_list = [[0]*3 for _ in range(4)]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:21:04