python字典增加元素 效率_流畅的Python_字典和集合

• Python 里的 dict 和 set 的效率有多高?

在一个有 1000 万个键的字典里查找 1000 个数,花在每个数上的时间不过是 0.337微秒

• 为什么它们是无序的?

键的次序取决于添加顺序,往字典里添加新键可能会改变已有键的顺序

• 为什么并不是所有的 Python 对象都可以当作 dict 的键或 set 里的元素?

键必须是可散列的

(1) 支持 hash() 函数,并且通过 __hash__() 方法所得到的散列值是不变的。

(2) 支持通过 __eq__() 方法来检测相等性。

(3) 若 a == b 为真,则 hash(a) == hash(b) 也为真。

• 为什么 dict 的键和 set 元素的顺序是跟据它们被添加的次序而定的,以及为什么在映射对象的生命周期中,这个顺序并不是一成不变的?

当往 dict 里添加新键而又发生散列冲突的时候,新键可能会被安排存放到另一个位置

• 为什么不应该在迭代循环 dict 或是 set 的同时往里添加元素?

无论何时往字典里添加新的键,Python 解释器都可能做出为字典扩容的决定。扩容导致的结果就是要新建一个更大的散列表,并把字典里已有的元素添加到新表里。这个过程中可能会发生新的散列冲突,导致新散列表中键的次序变化。

3e127a972699

3e127a972699

3e127a972699

3e127a972699

3e127a972699

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值