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

为何Python的__add__方法中必须用.copy()?字典引用问题解析

问题解析:为何__add__方法中必须使用.copy()?

首先得搞懂Python里可变对象的引用特性:字典(dict)属于可变容器类型,当你直接写total = self.inventory时,并没有生成一个新的字典,而是让total变量和self.inventory指向了内存里的同一个字典——说白了,它们是同一个字典的两个“别名”。

结合你的代码具体分析:

  • 不使用.copy()时,total就是backpack.inventory的引用。后面循环里执行total[item] = total.setdefault(item, 0) + back.inventory[item],本质是直接修改backpack自己的inventory字典。所以最后打印backpack.inventory时,物品数量会翻倍(相当于把backpack_2的物品直接加到了原背包里)。
  • 而用.copy()时,total = self.inventory.copy()会创建原字典的浅拷贝,生成一个全新的字典实例。后续对total的修改只会作用于这个新字典,完全不会影响原self.inventory的内容,这样原背包的物品数量就能保持不变,符合你“合并两个背包但不改动原背包”的预期。

可选的替代写法:

除了.copy(),你还可以用以下方式创建字典拷贝,效果完全一致:

  • total = dict(self.inventory)
  • total = {**self.inventory}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 18:27:45