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

Python中var = ({},) * 2与var = ({}, {})的区别解析

Python中({},) * 2与({}, {})的本质区别

核心差异:引用复用 vs 独立对象创建

  • ({},) * 2的本质:
    ({},)是一个包含单个空字典对象的元组,*2操作仅会将元组内的元素引用重复两次——这里的「重复」没有创建新字典,只是复制了原字典的内存地址。最终元组里的两个元素指向的是内存中同一个字典。
    解包赋值给dict_a和dict_b后,这两个变量其实是同一个字典的别名,修改其中一个,另一个会同步变化。

  • ({}, {})的本质:
    这里的两个{}是两次独立的字典初始化操作,会生成两个完全独立的空字典对象(内存地址完全不同)。元组里的两个元素是不同的字典引用,解包后dict_a和dict_b指向各自的字典,修改其中一个不会影响另一个。


对应代码验证

代码1(返回True)

dict_a, dict_b  = ({},) * 2
dict_a["anything"] = "whatever"
print(dict_a == dict_b)  # 输出True

解释:dict_a和dict_b指向同一个字典,修改dict_a的键值对后,dict_b对应的也是这个被修改后的字典,因此内容完全一致。

代码2(返回False)

dict_a, dict_b  = ({}, {},)
dict_a["anything"] = "whatever"
print(dict_a == dict_b)  # 输出False

解释:dict_a被修改为包含键值对的字典,而dict_b仍是初始的空字典,二者内容不同,因此返回False。


补充说明

Python中,序列(元组、列表)的*n操作对于可变对象(如字典、列表)只会复制引用,不会深拷贝对象。如果需要创建多个独立的可变对象,不要用*操作,而是显式创建多个实例(比如[{} for _ in range(2)])。

内容的提问来源于stack exchange,提问作者Overthinking Dumb Fellow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:07:13