dict的abc继承关系
dict属于Python的mapping类型
1 | from collections.abc import Mapping, MutableMapping |
我们看下dict的继承关系
1 | class MutableMapping(Mapping): |
以上就是dict的继承关系,我们看到很多和list有重复的,也就是说他们有很多相同方法。
dict的常用方法
我们查看源码对应的方法
我们看下fromkeys方法,是将一个可迭代的序列生成为一个字典的键。
1 | new_list = ["key1", "key2"] |
我们查找一个不存在的值使用setdefault将会返回默认值,然后插入到字典。
1 | In [27]: new_dict = dict() |
set和frozenset
set 集合 fronzenset (不可变集合) 无序, 不重复
1 | s = frozenset("abcde") #frozenset 可以作为dict的key |
frozenset是不可变的不像set有add方法,因此可以作为字典的key。
1 | #向set添加数据 |
dict和set的实现原理
校验规则查看老师的源码:https://github.com/liyaopinner/AdvancePython_resource
这里只是总结:
dict查找的性能远远大于list
在list中随着list数据的增大 查找时间会增大
在dict中查找元素不会随着dict的增大而增大
dict的key或者set的值 都必须是可以hash的不可变对象 都是可hash的, str, fronzenset, tuple,自己实现的类
__hash__
dict的内存花销大,但是查询速度快, 自定义的对象 或者python内部的对象都是用dict包装的
- dict的存储顺序和元素添加顺序有关
- 添加数据有可能改变已有数据的顺序
dict的实现原理(哈希表):
数组根据偏移量的查询复杂度为O(1)
推荐阅读: