package mainimport "fmt"func main(){ sample := map[string]string{ "key1":"value1", "key2":"value2", "key3":"value3", } for i := 0;i<3;i++{ fmt.Println(sample) }}上面的go代码仅打印一次map [string] string三次。我希望它具有固定的输出,但它显示如下:map[key3:value3 key2:value2 key1:value1]map[key1:value1 key3:value3 key2:value2]map[key2:value2 key1:value1 key3:value3]变了!而在python中:#!/bin/env python#encoding=utf8sample = { "key1":"value1", "key2":"value2", "key3":"value3",}for i in range(3): print sample输出:{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}{'key3': 'value3', 'key2': 'value2', 'key1': 'value1'}`
3 回答
ibeautiful
TA贡献1993条经验 获得超5个赞
是的,它是变化的,甚至是有意的(未经修改的地图的迭代之前一直很稳定)。目的是尽早发现有人错误地假设了稳定的迭代保证的情况。此外,由于增加了实现地图的自由度,因此可以对运行时库的该部分进行更多的将来优化。
湖上湖
TA贡献2003条经验 获得超2个赞
Python不保证迭代的顺序,但是只要您不修改两次调用之间的字典,它就可以保证顺序保持稳定:
If items(), keys(), values(), iteritems(), iterkeys(), and itervalues() are
called with no intervening modifications to the dictionary, the lists will
directly correspond.
Go也不保证。从您的示例中可以看出,Go中的顺序可能是稳定的,只是起点有所不同,但是由于没有任何保证,因此请不要依赖它。
- 3 回答
- 0 关注
- 222 浏览
添加回答
举报
0/150
提交
取消