# 这是学习廖雪峰老师python教程的学习笔记
1、不可变对象和可变对象
不可变对象
该对象所指向的内存中的值不能被改变。当改变某个变量时候,由于其所指的值不能被改变,相当于把原来的值复制一份后再改变,这会开辟一个新的地址,变量再指向这个新的地址。
可变对象
该对象所指向的内存中的值可以被改变。变量(准确的说是引用)改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变。
Python中,数值类型(int和float)、字符串str、元组tuple都是不可变类型。而列表list、字典dict、集合set是可变类型
2、dict
2.1、dict概览
dict,字典,全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} # 定义了一个字典,注意使用的是 {}
>>> d['Michael']
95
把数据放入dict的方法,除了初始化时指定外,还可以通过key放入
注:由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉
>>>d['Adam'] = 67
>>> d['Adam']
67
如果key不存在,dict就会报错:
>>> d['Thomas']
Traceback (most recent call last):
File "<stdin>", line 1, in< module>
KeyError: 'Thomas'
判断key是否存在的两种方法:
1、通过in判断
>>> 'Thomas' in d
False
、2通过dict提供的get()方法,如果key不存在,
可以返回None(返回None的时候Python的交互环境不显示结果),或者自己指定的value
>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
要删除一个key,用pop(key)方法,对应的value也会从dict中删除:
>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}
注意:dict内部存放的顺序和key放入的顺序是没有关系的
2.2、dict和list的区别
dict:
查找和插入的速度极快,不会随着key的增加而变慢;
需要占用大量的内存,内存浪费多。
list
查找和插入的时间随着元素的增加而增加;
占用空间小,浪费内存很少。
dict是用空间来换取时间的一种方法,dict的key必须是不可变对象
3、set
set和dict类似,也是一组key的集合,但不存储value。set中没有重复的key,set的key也必须是不可变对象
创建一个set,需要提供一个list作为输入集合,重复元素在set中会被自动被过滤:
>>>s = set([1, 2, 3])
>>> s
{1, 2, 3}
注意:传入的参数[1, 2, 3]是一个list,而显示的{1, 2, 3}只是告诉你这个set内部有1,2,3这3个元素,显示的顺序也不表示set是有序的。
add(key)方法可以添加元素到set中
>>> s.add(4)
>>> s
{1, 2, 3, 4}
remove(key)方法可以删除元素
>>> s.remove(4)
>>> s
{1, 2, 3}
set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作
>>>s1 = set([1, 2, 3])
>>>s2 = set([2, 3, 4])
>>>s1 & s2
{2, 3}
>>>s1 | s2
{1, 2, 3, 4}
3、参考文档
python中的可变对象和不可变对象 (https://www.cnblogs.com/sun-haiyu/p/7096918.html)