给字典数组的指定元素赋值时覆盖了数组全部值的原因是什么
问题原因
这是Julia内置fill函数的特性导致的。
当你执行fill(Dict("example" => 0.),3)时,fill不会为数组的每个位置单独生成新的字典实例,只会将同一个字典对象的内存引用重复填充到数组的三个位置。也就是说你看到的数组里的三个字典,本质上是同一个对象,不管修改哪个位置的字典键值,都是修改内存里的同一个数据,所以最终表现为所有元素都被覆盖。
解决方案
如果要生成每个元素都是独立字典的数组,替换fill写法为列表推导式即可:
a = [Dict("example" => 0.) for _ in 1:3]
这种写法每次循环都会创建一个新的字典实例,修改任意一个元素都不会影响其他元素。此时再执行a[1]["example"] = 1.后打印数组,就能得到预期结果:
[Dict("example" => 1.0), Dict("example" => 0.0), Dict("example" => 0.0)]
内容的提问来源于stack exchange,提问作者Karin Dekel
相关产品推荐
相关产品推荐

