dict
python 内置了字典 dict,dictionary,在其他语言中也称 map,使用键值(key-value)存储,具有极快的查找速度
####################### 声明 #################################
# 声明一个 dict
table = {'name':'zhangsan','age':18}
####################### 查询 #################################
# 通过 key 查询 value:key 不存在时报错
table['name']
# 如果不确定dict中是否存在某key,有如下两种方法:
# 1.使用 in 关键字进行判断
'salary' in table # 返回 True
# 2.使用 dict 提供的get()方法
table.get('salary') # key不存在时返回 None,None在python交互环境中不显示结果
table.get('salary', -1) # key不存在时返回-1,即自定义返回值
####################### 插入 #################################
# 插入元素
table['salary'] = 3600
####################### 更新 #################################
# 更新元素:相同 key 的赋值会进行更新
table['salary'] = 6000
####################### 删除 #################################
# 删除一个 key,传入的 key 必须在dict中,否则报错
table.pop('salary')
注意事项:
- dict 的 key 必须为不可变对象,如字符串、整数等
- dict 底层使用的是哈希表
- 元组虽然是不可变对象,但是当元组中存在可变对象如 list 时,由于 list 为可变元素,不支持 hash 方法,因此会抛出异常
>>> table[(1,2,[2,3])] = 2
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
table[(1,2,[2,3])] = 2
TypeError: unhashable type: 'list'
dict 与 list 比较
dict:用空间换时间
- 查找和插入的速度极快,不会随着key的增加而变慢
- 需要占用大量的内存,内存浪费多
list:
- 查找和插入的时间随着元素的增加而增加
- 占用空间小,浪费内存很少
set
set 类似于 dict,也是一组 key 的集合,但不存储 value,且不允许有重复元素,因此不支持存放可变元素
####################### 创建set #################################
# 通过 list 创建 set:集合中的重复元素会被过滤
s = set([1,2,3])
# 直接创建
s = {1,2,3}
####################### 往set中添加元素 #################################
# add(key):添加重复元素不会报错,但不会修改集合
s.add(4)
####################### 删除set中的元素 #################################
# remove(key)
s.remove(2)
####################### set运算 #################################
# &:交集
# |:并集
不可变对象
在 python 中,字符串 str、元组 tuple、整数都是不可变对象,而 list 属于可变对象。
- 对于可变对象,如list,对其进行操作,list 内部的内容会发生变化
- 对于不可变对象,如 str,对 str 进行操作时,如 str.replace() 方法,其不是直接改变了 str ,而是改变了变量的引用