ad

为何只有一个元素被给出一个值时,为何python字典的所有元素都会以相同的方式更改?-英雄云拓展知识分享

匿名投稿 273 2024-01-22

谁能解释一下?当我更改一个元素时,为何YearTonametolist的所有元素都会遭到作用?

yeartonametolist = dict.fromkeys(range(2007,2017),{})

yeartonametolist[2007]["a"] = 1

yeartonametolist[2008]["b"] = 2

print yeartonametolist

为何只有一个元素被给出一个值时,为何python字典的所有元素都会以相同的方式更改?-英雄云拓展知识分享

输出:

{

2016: {'a': 1, 'b': 2},

2007: {'a': 1, 'b': 2},

2008: {'a': 1, 'b': 2},

2009: {'a': 1, 'b': 2},

2010: {'a': 1, 'b': 2},

2011: {'a': 1, 'b': 2},

2012: {'a': 1, 'b': 2},

2013: {'a': 1, 'b': 2},

2014: {'a': 1, 'b': 2},

2015: {'a': 1, 'b': 2}

}

看答案

看起来它们具有相同的内存地址,因此修改一个修改它们,这是由于它们是唯一的参考。

这是一个更好的解释:

您的第一行使用整数键创建对象,而空对象作为值 全部 他们。

yeartonametolist = dict.fromkeys(range(2007,2017),{})

现在这一点,如果您使用 id() 这样的功能

id(yeartonametolist[2016]) #4294024972L

id(yeartonametolist[2015]) #4294024972L

这是同一ID,所以如果您这样做

yeartonametolist[2007]["a"] = 1

yeartonametolist[2008]["b"] = 2

您正在更改同一对象。

如果您更改 {}object()

test = dict.fromkeys(range(2007,2017), object() )

print test

输出:

{

2016: <object object at 0xfff964d8>,

2007: <object object at 0xfff964d8>,

2008: <object object at 0xfff964d8>,

2009: <object object at 0xfff964d8>,

2010: <object object at 0xfff964d8>,

2011: <object object at 0xfff964d8>,

2012: <object object at 0xfff964d8>,

2013: <object object at 0xfff964d8>,

2014: <object object at 0xfff964d8>,

2015: <object object at 0xfff964d8>

}

每一个关键点的值指向相同的内存地址。


🚀🌟 点击注册 免费试用超级应用平台-英雄云企业级hpapaas 🌟🚀 😃👉🌐

免责声明:

本网址(www.yingxiongyun.com)发布的材料主要源于独立创作和网友匿名投稿。此处提供的所有信息仅供参考之用。我们致力于提供准确且可信的信息,但不对材料的完整性或真实性作出任何保证。用户应自行验证相关信息的正确性,并对其决策承担全部责任。对于由于信息的错误、不准确或遗漏所造成的任何损失,本网址不承担任何法律责任。本网站所展示的所有内容,如文字、图像、标志、音频、视频、软件和程序等的版权均属于原创作者。如果任何组织或个人认为网站内容可能侵犯其知识产权,或包含不准确之处,请即刻联系我们进行相应处理。

标签:Kotlin Java进销存 运营效能
上一篇:如何在变更事件中的jQuery中获得文本框的先前值-英雄云拓展知识分享
下一篇:扩大的Modelform不保存相干表-英雄云拓展知识分享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~