Python中 dict 底层结构 和 list / tuple区别

1.Python dict 底层结构

dict 底层使用的哈希表

为了支持快速查找使用了哈希表作为底层结构(Cpython解释器实现也使用哈希表)

哈希表平均查找时间复杂度O(1)

Cpython解释器使用二次探查解决哈希冲突问题。

面试经常被问到的哈希表的实现原理和底层细节,第一个问题哈希表是怎么解决哈希冲突的常用方法有链接法和探查法,探查法又分为线性探查和二次探查等。第二个问题是哈希表是如何扩容的,哈希表就是一个数组,不断去添加元素时候如何去触发扩容操作,当前数据存储的数量(即size())大小必须大于等于阈值;当前加入的数据是否发生了hash冲突,满足这两个条件就会哈希扩容。

2.Python list / tuple区别

     都是线性结构,支持下标访问

  ①list 是可变对象,tuple 是不可变对象,保存的引用不可变,如果tuple里面保存一个list,list本身还是可变的

>>> t = ([1], 2, 3)
>>> t[2] = 3
Traceback (most recent call last):
  File "", line 1, in 
TypeError: 'tuple' object does not support item assignment
>>> t[0]
[1]
>>> t[0].append(1)
>>> t
([1, 1], 2, 3)  # 第一个列表对象元素虽然改变,但它依然是这个列表对象

     保存的引用不可变指的是,你没法替换这个对象,但是如果它本身就是一个可变对象,是可以修改这个引用指向的可变对象。

  ② list 没法作为字典的 key , tuple可以(可变对象不可以hash)。

你可能感兴趣的:(Python语言)