对于Python字典视图.values(),.keys().items()是否有序的解答。

 Coldwings Coldwings ​ Python 话题的优秀回答者 如果按照语言规范来看,Python的规范里没有说明Dict是一个有序的类型。换句话说,dict就是无序的,因为语言规范不保证它按照什么顺序出来。要有序,请使用OrderedDict。 但是无序不是说每次输出结果都不同,无序只是指结果不保证一定与插入顺序一致而已。 CPython 3.6里对dict有个新的实现,使得字典内部存储的顺序不仅仅与key有关,还与插入顺序有关。
但是有关并不代表它就一定按照插入顺序依次出现(似乎当字典实现在内存中进行扩展的时候就可能造成结果不一致),
只不过表示如果key相同,插入顺序相同,那么结果也是相同的。 在此之前,用values和keys方法取到的list仅与key(准确的说是key的__hash__)有关而与插入顺序无关。

 

 字典是无序的,这句话是对的。但是字典的存储过程却是按顺序的。字典的存储背后的逻辑是散列表,也就是稀疏数组。
    -> dict初始化之后,Python解释器会给dict分配一定的空间,往字典里添加是按顺序添加的。
    -> 但是,如果如果继续往字典里添加新键,有可能会引起Python解释器对存储空间的扩容,扩容的过程会新建散列表,
    -> 然后复制已有的元素到新散列表,这个过程可能会引起散列冲突,导致dict的键值对的次序发生变化。
    -> 《流畅的Python》一书有关于字典的存储更为详细的介绍。如果不了解散列表,可以查资料。

作者:陈子坤
链接:https://www.zhihu.com/question/65855807/answer/261889672
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

 

指导链接:https://www.zhihu.com/question/65855807

 

以上两个答案我觉的应该解释的比较正确。

posted @ 2020-03-18 21:38  就是想学习  阅读(936)  评论(0编辑  收藏  举报