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

为何两个不同Python对象的字典表现为同一个字典?

为什么两个Node实例共享同一个字典?

这是因为你定义的Dictionary是类变量,而不是实例变量——它属于Node类本身,所有创建出来的Node实例都会共享这同一个字典对象,所以不管你通过node1还是node2去修改它,都是在操作同一个东西。

具体解释

在你的代码里:

class Node:
    Dictionary={}  # 这是类变量,属于整个Node类

类变量是在类定义时就创建的,所有实例都会指向同一个引用。所以当你给node1.Dictionary添加元素,再给node2.Dictionary添加元素,本质上都是在修改同一个字典。

修复方案

要让每个Node实例拥有独立的字典,你需要把Dictionary移到__init__方法里,定义为实例变量(用self.前缀):

class Node:
    def __init__(self):
        self.Dictionary = {}  # 每个实例初始化时都会创建自己的字典

def main():
    node1 = Node()
    node2 = Node()
    node1.Dictionary.setdefault(1, []).append('a')
    node1.Dictionary.setdefault(2, []).append('b')
    node2.Dictionary.setdefault(3, []).append('c')
    node2.Dictionary.setdefault(4, []).append('d')
    print("Node 1 ",node1.Dictionary.values())
    print("Node 2 ",node2.Dictionary.values())

main()

运行这段代码,输出就会符合你的预期:

Node 1  dict_values([['a'], ['b']])
Node 2  dict_values([['c'], ['d']])

小提示

如果你想验证变量的归属,可以打印类和实例的__dict__属性:

  • print(Node.__dict__) 会显示类的属性,原来的代码里Dictionary会在这里;
  • print(node1.__dict__) 会显示实例的属性,修改后的代码里Dictionary会在这里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:55:09