参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017104324028448
dict是字典,可以储存键值对类型的值,set与dict相同,只是set只储存key值,而不储存value。
list.cout(‘a‘)查看list中‘a‘的个数
>>> l [‘a‘, 2] >>> l.count(‘a‘) 1
dict又称map,他以键值对的形式储存数据,并且为了查找方便,在存储数据的时候,会根据key的值去计算应该放置的位置。为了保证计算位置的算法的结果不冲突,所以就要求dict数据的key值不能重复。由于这种特性,使得在查找数据时,与list的从头开始查找相比,dict中储存的数据查找时极快的,但是对空间有些浪费,因为常规情况下的带储存数据经过算法处理后,并不会无间隔的紧密的按顺序放置在内存中,而是分散的。
一个key只能对应一个value
可以通过in判断是否存在(只匹配key,不匹配value)
>>> l={‘a‘:‘1‘,‘b‘:‘2‘} >>> ‘a‘ in l True >>> ‘1‘ in l False
还可以通过 get() 方法获取指定key的内容,若key不存在,返回None,或者返回自己指定的内容
>>> l.get(‘a‘) ‘1‘ >>> l.get(‘1‘)#返回None >>> l.get(‘1‘,aaa) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name ‘aaa‘ is not defined#因为必须写“aaa” >>> l.get(‘1‘,1111) 1111 >>>
使用 pop(key) 方法删除指定的key值
使用dict一定要注意,dict的key一定是不可变对象,在Python中,字符串、整数等都是不可变的,而list是可变的。
两者之间的区别主要在于查找速度和对储存的使用率上面
1)list的查找速度会随着存放数据的数量的增加而增加,但占用的内存小,浪费内存还小。
2)dict的查找速度极快,不会受存放数据数量大小的影响,但占用内存大,浪费空间多。
set 和dict类似,也是一组 key 的集合,但不储存 value ,同样的key不能重复。
使用一个list作为输入创建set
>>> s=set([1,2,‘a‘])#注意创建时传入的参数是一个list >>> s {1, 2, ‘a‘}#这样显示并不代表set是有序的 >>> s=set([1,2,‘a‘,‘a‘]) >>> s {1, 2, ‘a‘} #不重复 >>>
使用 add(key) 添加 key 到 set 中
>>> s.add(‘b‘) >>> s.add(‘a‘)#重复添加没有效果 >>> s {1, 2, ‘a‘, ‘b‘}
使用 romove(key) 删除
set 可以看作为数学意义上的一个集合,这个集合中的元素是无序的、是不重复的,可以做数学意义上的交集、并集操作。
>>> b=set([3,4,‘d‘]) >>> s&b#交集 set() >>> b {‘d‘, 3, 4} >>> s|b#并集 {1, 2, ‘a‘, 3, 4, ‘b‘, ‘d‘} >>>
不能添加可变元素
>>> b.add([5,6]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unhashable type: ‘list‘ >>>
不可变对象就是虽然看起来对他的改变会生效,是因为其返回一个新的对象。如
>>> a = ‘abc‘ >>> b = a.replace(‘a‘, ‘A‘) >>> b ‘Abc‘ >>> a ‘abc‘
而可变对象如 list
>>> l=[1,2] >>> l [1, 2] >>> l[0]=‘a‘ >>> l [‘a‘, 2] >>>
所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
python 基础使用list、dict、set、可变与不可变对象
原文:https://www.cnblogs.com/Gaoqiking/p/10951707.html