1. dict
Python中的dict等于js中的 map ,使用键-值(key-value)存储,具有极快的查找速度。
如果 我们要根据同学的姓名去查找他的成绩在不用dict的情况下。就需要两个list:
names = ['Michael', 'Bob', 'Tracy'] scores = [95, 75, 85] // 通过一个名字,去查找对应的位置,再从scores中取出对应的成绩 这样导致list的越来越长,速度越来越慢 // 如果通过dict实现,只需要“名字-成绩”就行,无论这个表多大,查找速度都不会变慢,如下: >>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95
原理: 因为dict是通过索引去查找的而不是通过遍历的方式去找的。
// 除了初始化指定外,还可以通过key放入: >>> d['Adam'] = 67 >>> d['Adam'] 67 // 由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉: >>> d['Jack'] = 90 >>> d['Jack'] 90 >>> d['Jack'] = 88 >>> d['Jack'] 88
如果key不存在,dict将会报错。 可以通过in判断key是否存在
或者通过get()方法
// in 方法 >>> 'Thomas' in d False // get() key不存在返回None >>> d.get('Thomas') >>> d.get('Thomas', -1) -1 // 删除key 通过 pop()方法 >>> d.pop('Bob') 75 >>> d {'Michael': 95, 'Tracy': 85}
注意点:
1. dict 内部存放的顺序和key的放入顺序没有关系 2. 和list比较 2.1 查找和插入速度极快,不会随着key的增加而变慢 2.2 需要占用大量的内存,内存浪费多 3. 和list相反 3.1 查找和插入时间随着元素的增加而增加 3.2 占用空间小,浪费内存少 4. dict是一种以空间换时间的方法 5. dict的key必须是不可变对象 6. 字符串和整数等不可变,可以作为key,而list的则不行。
2. set
和dict类似,但是不存储value,key不重复。创建set,需要提供一个list作为输入集合,如下:
s = set([1, 2, 3])
s
{1, 2, 3}
// 传入的参数[1, 2, 3]是一个list,而显示的{1, 2,
3}只是告诉你这个set内部有1,2,3这3个元素,
显示的顺序也不表示set是有序的
// set中重复将会被过滤 >>> s = set([1, 1, 2, 2, 3, 3]) >>> s {1, 2, 3} // 通过add(key)可以向set中添加元素,可以重复添加但无效果 >>> s.add(4) >>> s {1, 2, 3, 4} >>> s.add(4) >>> s {1, 2, 3, 4} // 通过remove(key)删除元素 >>> s.remove(4) >>> s {1, 2, 3}
set和dict的区别仅在于没有存储对应的value。
3. 不可变对象
对于可变对象,对它进行操作,对象本想将会变化
a = ['c', 'b', 'a']
a.sort()
a
['a', 'b', 'c']
对于不可变对象,对象本身不会变化
a = 'abc'
a.replace('a', 'A')
'Abc'
a
'abc'
所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。