dict
dict是dictionary的缩写,python内置了字典,在其他语言中也称为map,使用键值对储存,具有极快的查找速度。
如果是只用list来实现,就需要两个list,先在第一个list中查找,找到之后再到另一个list中查找,显然这样速度很慢。而且list达到很长,耗时就很长很长。。。
names = ['Michael', 'Bob', 'Tracy']
scores = [95, 75, 85]
因为一个key只对应一个value,如果多次针对一个key赋值,那么前面的key的value就会被覆盖。
还有如果key不存在,就会报错,所以我们需要提前检查key是否存在。
删除一个key:使用pop(key)方法,相对应的value也会被删除。
dict可以用在需要告诉查找的很多地方,牢记的是,dict 的key必须是不可变对象,即string,tuple,numbers。
dict查找实际是用的哈希算法。
set
set是一组key的集合,但是不存储value。由于key不能重复,所以,在set中,没有重复的key。
创建一个set
必须传入一个list作为输入集合
s = set([1,2,3]);
s//{1,2,3}
set接收一个参数,就是list或tuple或者其他可迭代对象
L = [x,y,z];
s = set(L);
但是L中的元素x,y,z有任何一个可变就会报错。
添加元素
可以重复添加,但是不会有效果
s.add(4);
删除元素
s.remove(4);
set可以看做是数学意义上的无序和无重复元素的集合,所以两个set可以做&(交集)和|(并集)运算。
set和dict唯一区别在于set没有存储对应的alue,set的原理和dict一样,同样不可以放入可变对象
python内部传值
先贴一段代码
# 对list进行测试
list0 = [1,2,"tt",["ryr","hr"]];
list1 = list0;
list1[0] = 11;
list1[1] = 22;
list1[3][0] = "aa";
list1[3][1] = "bb";
# //对数字和字符串还有tuple进行测试
a = "yrr";
b = a;
b = "rer";
c = ("gr",12,["grr",45]);
d = c;
d = ("grgr",22,["grr",455]);
# c[0] = "grggr";
# c[1] = 22;
c[2][0] = "ggrgr";
c[2][1] = "help";
print(c);
print(d);
print(a);
print(b);
print(list0);
print(list1);
在python中,string,tuples,numbers是不可更改的对象,而list,dict则是可以修改的对象,我理解的修改和不可修改,是指是否能在本身上进行修改。
nfoo = 1
nfoo = 2
lstFoo = [1]
lstFoo[0] = 2
修改:虽然string,tuples,numbers可以进行修改,但是修改之后,原来内存中的那个numbers就不存在了,就被"抛弃"了,内存中又重新创建一块区域来存储另一个值。
但是对于list和tuples而言,修改的仅仅是内容改变,原来的那块内存并没有被丢弃,也没有创建新的内存。