Python基础四

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中,并解释结果?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值