首页 > 技术文章 > python字典的一些深入体会

dcotorbool 2017-12-27 11:20 原文

python字典

python字典一些深入体会

python字典3个方法,items(),values(),keys(),返回的对象不是list,3个方法返回的对象可以迭代,字典也可以推导

squares={number:number**2 for number in range(100)}  

Cpython的字典采用散列表作为底层数据结构,只有可哈希的对象才能作为字典的键,可哈希的对象就是整个具有不变性的对象,而且可以和其他对象对比,如果一个对象有__hash__方法,__eq__属性,就是可hash的。
如果两个对象相等,那么它们的散列值一定相等,如果两个散列值相等,那么对象不一定相等,简单的理解方式就是1与6都去模5得到的结果都是1,散列值好比就是1,对象是1,6.这就是散列冲突。Cpython用开放定址法解决这个冲突,开放定址法就是当冲突发生是,散列值在散列表这一个空的散列地址存进去
字典复制存在一个浅拷贝和深拷贝,浅拷贝只复制一级目录,深拷贝复制所有目录

a={1:{'a','b'}}
浅拷贝的情况下,去到键1的值,值是和对象a共享的,操做的时候a里的值也会改变,深拷贝就是将所有的内容都可以复制一边
b=a.copy()浅拷贝
form copy import deepcopy深拷贝
c=deepcopy(a)

推荐阅读