python中列表,元组和字典的区别

python中列表,元组和字典的区别


直观上

  1. 元组是不可变的,而列表和字典是可变的;
  2. 列表不能作为字典的key值,而元组可以,字典的键是唯一的;
  3. 元组表示的是结构,而列表表示的是顺序

实现方式上

  1. list是一种元素个数可变的线性表,是采用分离式技术实现的动态顺序表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(保序);元素保存在一块连续的储存区中,可以基于下标的高效元素访问和更新,时间复杂度为O(1);允许任意加入元素,而且在不断的加入元素的过程中,表对象的标识(对象的id值)不变;

Q: 怎么保证list对象在扩充内存的时候对象id不变
A: 为了任意加入元素的时候,表对象的标识(id)不变,需要使用分离式计数实现动态顺序表;原始是对象申请了一定大小的内存空间,如果一直往列表中添加算法的话就会导致改内存块溢出,所以就要内存扩充;如果使用的是一体式结构,元素存储区和储存表信息区以连续的内存地址方式安排在一块储存里,这就会导致在内存扩充的时候将整个顺序表(信息表储存区和元素储存区)整体迁移,这就导致列表对象的地址发生了变化;

python中列表,元组和字典的区别_第1张图片
python中列表,元组和字典的区别_第2张图片

  1. 字典是通过散列表或说哈希表实现的。字典也被称为关联数组,还称为哈希数组等。也就是说,字典也是一个数组,但数组的索引是键经过哈希函数处理后得到的散列值。哈希函数的目的是使键均匀地分布在数组中,并且可以在内存中以O(1)的时间复杂度进行寻址,从而实现快速查找和修改。哈希表中哈希函数的设计困难在于将数据均匀分布在哈希表中,从而尽量减少哈希碰撞和冲突。由于不同的键可能具有相同的哈希值,即可能出现冲突,高级的哈希函数能够使冲突数目最小化

你可能感兴趣的:(python,python,开发语言)