zoukankan      html  css  js  c++  java
  • 对于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

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

  • 相关阅读:
    Java使用MyEclipse2017时的一些小细节
    Windows设置双ip访问虚拟机方法
    Python-函数的参数
    Python dict.set
    FTP错误代码列表
    使用批处理文件在FTP服务器 上传下载文件(转载)
    FreeRTOS学习笔记7-FreeRTOS 队列相关
    FreeRTOS学习笔记6-调度器开启和任务相关函数
    从github hexo 跑来 博客园
    Nodejs实战 —— 测试 Node 程序
  • 原文地址:https://www.cnblogs.com/sidianok/p/12520522.html
Copyright © 2011-2022 走看看