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

Python用列表乘数字创建二维列表修改元素异常是什么原因?

Python列表乘法运行机制及坑点说明

[2]*3的运行原理

Python中的序列 * 正整数语法,本质是将序列内的元素引用复制N次后拼接为新序列,不会对元素本身做深拷贝。
对于[2] * 3的场景:

  • 列表中的元素是不可变的整数类型,乘法操作会把指向整数2的引用复制3次,最终得到[2, 2, 2]的结果。
  • 因为整数不可修改,后续你修改列表某个位置的元素时,只是把该位置的引用替换为其他值,不会影响其他位置的元素,因此这种用法不会出现异常。

二维数组创建时的问题原因

你使用[["O"]*7]*6创建二维列表时触发了浅拷贝的坑:

  1. 第一步["O"] *7会先生成一个包含7个"O"的一维列表
  2. 第二步*6操作是把上述一维列表的内存引用复制了6次,最终你得到的外层列表里的6个内层列表,本质是指向同一个内存地址的同一个对象,不是6个独立的列表。
  3. 因此你修改exploded[0][0] = 9时,实际修改的是这个共享的内层列表的第一个元素,所有引用了该内层列表的行都会同步发生变化,就出现了修改一个元素整列都变的现象。

正确的二维列表创建方式

如果要生成独立的内层列表,使用列表推导式即可:

exploded = [["O"] *7 for _ in range(6)]

该写法每次循环都会生成全新的内层列表,修改任意元素不会影响其他行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:24:02