廖雪峰的python笔记( 四)--dict与set

1.dict:

  • dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储。
  • 正确使用dict非常重要,需要牢记的第一条就是dict的key必须是不可变对象
  1. 在Python中,字符串、整数等都是不可变的,因此,可以放心地作为key。而list是可变的,就不能作为key
  • dict={key:value,...}
  • key-value存储方式,在存放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value
  • 多次对一个key放入value,后面的值会把前面的值覆盖
  • 判断dict中是否有key:
  1. 通过in判断key是否存在
  2. dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value:dict.get(key,value),返回None的时候Python的交互环境不显示结果
  • 删除一个key:用pop(key)方法,对应的value也会从dict中删除
  • dict内部存放的顺序和key放入的顺序是没有关系的
  • 和list比较,dict有以下几个特点:
  1. 查找和插入的速度极快,不会随着key的增加而变慢;
  2. 需要占用大量的内存,内存浪费多。

        而list相反:

  1. 查找和插入的时间随着元素的增加而增加;
  2. 占用空间小,浪费内存很少。

2.set:

  • set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key
  • s=set([1,2,3])
  • 要创建一个set,需要提供一个list作为输入集合,重复元素在set中自动被过滤
  • 添加元素:set.add(key)
  • 删除元素:set.remove(key)
  • set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集(&)、并集(|)等操作
  •  

3.不可变对象:

  • 不可变对象:int,string,float,tuple
  • 不可变对象,该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址

  • 可变对象 :list,dictionary
  • 可变对象,该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变

不可变的对象的特征没有变,依然是不可变对象,变的只是创建了新对象,改变了变量的对象引用。

小结:

关系 list

tuple

dict set
list list可以放入list tuple可以放入list dict可以放入list set可以放入list
tuple list可以放进tuple tuple可以放入tuple dict可以放入tuple set可以放入tuple
dict list可以放入dict作为value,但不可以作为key tuple可以放入dict作为key dict可以放入dict作为value,但不可以作为key set可以放入dict作为value,但不可以作为key
set list不可以添入set,但是可以用为输入集合 tuple可以放入set(只有不含list,tuple,set,dict的tuple可以放进set) dict不可放入set set不可以放入set

既然dict和set原理相同,在Key中均不可以存放不可变对象那么为什么set中仍然存放的是list

dict和set中的key确实是不可以用不可变对象。如下:

set中之所以用list可以,是因为它把这个list看做一个整体。list中的元素当然可以替换,但是这并不影响list这个整体

[这里与tuple可以放入list的原因相同]

猜你喜欢

转载自blog.csdn.net/weixin_38715903/article/details/84582435
今日推荐