dic
Talking is cheap, show me the code
>>> d = {'Thmoas':100, 'Zoomeye':90, 'Hacker':1000}
>>> d['Hacker']
1000
>>> d.get('Hacker')
1000
>>> 'Hacker' in d
True
>>> 'Baidu' in d
False
>>> d.get('Thmoas')
100
>>> d.get('Thmoas', -1)
100
>>> d.get('Poc', -1)
-1
>>> d.pop('Hacker')
1000
>>> d
{'Thmoas': 100, 'Zoomeye': 90}
>>> key = [1,2,3]
>>> d[key] #key可变不能作dic的key
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> d[key] = 'a list' #同上
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
和list比较,dict有以下几个特点:
查找和插入的速度极快,不会随着key的增加而增加;
需要占用大量的内存,内存浪费多。
而list相反:查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
所以,dict是用空间来换取时间的一种方法。dict可以用在需要高速查找的很多地方,在Python代码中几乎无处不在,正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象。
这是因为dict根据key来计算value的存储位置,如果每次计算相同的key得出的结果不同,那dict内部就完全混乱了。这个通过key计算位置的算法称为哈希算法(Hash)。
要保证hash的正确性,作为key的对象就不能变。在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key
以上引用来自廖雪峰老师网站,如有侵权,立马删除!
set
>>> s = set([1,2,3])
>>> s
set([1, 2, 3])
>>> s.add(3) #set中不包含相同元素
>>> s
set([1, 2, 3])
>>> s.add(4)
>>> s
set([1, 2, 3, 4])
>>> s.remove(1)
>>> s
set([2, 3, 4])
>>> ss = set([2,3,4,5,6])
>>> s & s
set([2, 3, 4])
>>> s & ss
set([2, 3, 4])
>>> s | ss
set([2, 3, 4, 5, 6])
不可变对象
>>> a = 'abc'
>>> a.replace('a','A')
'Abc'
>>> a
'abc'
>>>b = a.replace('a','A')
>>> b
'Abc'
Question(未解决):
tuple虽然是不变对象,但试试把(1, 2, 3)和(1, [2, 3])放入dict或set中,并解释结果?