为何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
相关产品推荐
相关产品推荐

