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

Python字典初始化顺序:浅拷贝后键值覆盖的可靠性疑问

字典解包时的键覆盖规则

答案是肯定的,{**d, 1: 11} 里 d[1] 一定会被后面的 1:11 覆盖,这个行为是确定的,和字典本身的顺序无关:

  • 字典字面量的处理逻辑是按书写顺序依次处理每个元素:先解析 **d,把原字典 d 的所有键值对导入新字典;再处理后面的 1: 11,如果该键已存在(也就是 d 包含键 1),就会覆盖之前的对应值。
  • 这是Python语法明确规定的行为,哪怕是在3.7版本之前字典无序的时期,这个覆盖规则依然生效——不管原字典 d 里的键顺序如何,只要在 **d 之后写了同名键的新值,就会覆盖前面导入的内容。
  • 反过来,{1: 11, **d} 这种写法是先添加 1:11,再导入 d 的键值对,此时 d 里的键 1 会覆盖前面的 1:11,最终保留的是原字典的对应值。

用你的代码示例佐证:

d = {1: 1, 2: 2}
d1 = {1: 11, **d}  # 结果 {1: 1, 2: 2},d的键1覆盖了先写的1:11
d2 = {**d, 1: 11}  # 结果 {1: 11, 2: 2},后写的1:11覆盖了d的键1

内容的提问来源于stack exchange,提问作者Green 绿色

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 01:25:22