You need to enable JavaScript to run this app. Python操作fill变量为何会修改up、down两个嵌套列表的值?
优惠活动
大模型
产品
解决方案
定价
更多

Python操作fill变量为何会修改up、down两个嵌套列表的值?

问题原理解答

核心原因

Python中的列表属于可变对象,变量存储的是列表的内存地址引用,而非列表本身的独立拷贝。

代码行为拆解

  • 执行fill = up时,并没有创建up的副本,只是让变量fill和up绑定到内存中的同一个列表对象,两个变量相当于同一个列表的不同别名。
  • 执行fill[j] += 1时,属于列表的原地修改操作,直接修改的是fill指向的列表对象本身。由于up和fill指向同一个对象,你观察到的up值变化本质是同一个对象被修改,不需要up出现在赋值号左侧。
  • 当遇到.执行fill = down时,只是把fill的绑定关系切换为指向down对应的列表对象,后续fill[j] += 1就会原地修改down指向的列表。

示例验证

以输入第一列的内容# . . # #为例:

  1. 初始fill绑定up,第一行匹配#,up[0]加1变为1
  2. 第二行匹配.,fill切换绑定到down
  3. 第四行匹配#,down[0]加1变为1
  4. 第五行匹配#,down[0]再加1变为2
    最终得到的up[0]=1、down[0]=2和示例输出完全吻合。

认知误区澄清

只有赋值号左侧变量会被修改的逻辑仅适用于不可变对象(整数、字符串、元组等),这类对象无法被原地修改,赋值时只会创建新对象绑定到左侧变量。而可变对象支持原地修改,只要有引用指向该对象,通过任何引用做原地操作都会修改对象本身,所有指向该对象的变量都会同步感知到变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 17:48:02