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

Python多变量并行赋值执行顺序疑问:列表索引赋值结果不符预期

核心原理

Python 的多重赋值执行逻辑严格遵循以下顺序,不存在真正的“完全同时执行”:

  • 第一步:先从左到右计算等号右侧所有表达式的结果,全部存入临时元组缓存,这一步不会修改任何原有变量的值
  • 第二步:再从左到右依次将临时元组中的值赋值给等号左侧的目标,且每个左侧目标的寻址(比如nums[i]对应的具体下标位置)是在赋值到该目标的那一刻才会计算,不会提前预存。

第一段代码执行过程

代码:

i=0
nums[i],i=None,nums[i]
print(i,nums)
  1. 计算右侧表达式:第一个值为None,第二个值为nums[i](此时i仍为初始值0,所以nums[0]=3),缓存的临时元组为(None, 3)
  2. 按顺序给左侧赋值:
    • 先给第一个目标nums[i]赋值:此时i还未被修改,仍是0,所以将nums[0]设为None
    • 再给第二个目标i赋值:将i设为缓存的3
      最终输出3 [None, 2, 1, 0],和预期一致。

第二段代码执行过程

代码:

i=0
i,nums[i]=nums[i],None
print(i,nums)
  1. 计算右侧表达式:第一个值为nums[i](此时i为0,nums[0]=3),第二个值为None,缓存的临时元组为(3, None)
  2. 按顺序给左侧赋值:
    • 先给第一个目标i赋值:将i设为缓存的3
    • 再给第二个目标nums[i]赋值:此时计算i的值已经是3,所以是将nums[3]设为None,完全不会修改nums[0]
      最终输出3 [3, 2, 1, None],差异的根源就是左侧赋值是顺序执行,后一个目标的寻址依赖已经修改后的i值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:15:04