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

Python链式赋值产生自引用而非独立对象的运行结果该如何解释?

核心原因:你对Python链式赋值的执行逻辑理解有误
  • Python中链式赋值的右侧表达式只会计算一次,仅生成唯一的对象实例,左侧所有赋值目标都会拿到这个对象的引用,而非重复创建新的相同值对象。
  • 链式赋值的执行顺序是「先计算右侧表达式得到对象 → 从左到右依次给左侧目标赋值」

a = a[0] = {'a': 1}的实际执行步骤如下:

  1. 首先计算最右侧的{'a': 1},生成一个字典对象,我们暂记为temp,此时temp的值为{'a': 1}
  2. 先执行左侧第一个赋值:a = temp,此时变量a指向temp这个字典对象
  3. 再执行第二个赋值:a[0] = temp,也就是给temp这个字典新增键0,值就是temp本身

操作完成后这个字典就形成了循环引用:自己的0键指向自己,所以不管你访问多少层[0],拿到的都是同一个字典对象,输出里的{...}就是Python用来表示循环引用的标识,避免无限递归打印。

你之前的等效写法是错误的,你写的:

a = {'a': 1}
a[0] = {'a': 1}

是两次创建不同的字典对象,两个字典没有关联,自然不会出现循环引用。正确的等效代码应该是:

temp = {'a': 1}
a = temp
a[0] = temp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 08:36:02