python dict属性和项目

时间:2014-06-01 19:47:53

标签: python dictionary

在下面的python代码中,dict.setitem和。之间有什么区别 setattr?

当我评论setattr语句时,我无法运行g.abcd。但是,如果我保持 setattr声明, 我可以同时运行g.abcd和g ['abcd'],返回相同的值300

id(g.abcd) and id(g['abcd'])返回相同的值。

我很困惑:dict.setitem应该插入一个哈希对 哈希表。 setattr应该添加额外的属性(或字段或成员) 班级字典。所以他们似乎是不同的东西。因此我认为是 预计消除setattr将失败g.abcd。

但我不明白 为什么id()为g.abcd和g ['abcd']返回相同的值,为什么它们引用 内存中相同的东西/位置?

THX

class T(dict):

    def __setitem__(self, key, value):
        dict.__setitem__(self, key, value)   #  <-------  dict.setitem
        setattr(self, key, value)                 #  <-------- setattr


g=T()
g.__setitem__('abcd', 300)

>>> id(g.abcd)

147169236

>>> id(g['abcd'])

147169236

1 个答案:

答案 0 :(得分:2)

因为在两种情况下都存储相同的对象。因此,当您检索它时,无论您以何种方式获取它,您都将获得相同的对象。怎么可能是其他方式?