在下面的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
答案 0 :(得分:2)
因为在两种情况下都存储相同的对象。因此,当您检索它时,无论您以何种方式获取它,您都将获得相同的对象。怎么可能是其他方式?