python 06 id is == set 深浅copy
01 今日内容大纲
- is==id用法
- 代码块
- 同一代码下的缓存机制
- 不同代码下的缓存机制(小数据池)
- 总结
- 集合(了解,但金融有时候会用到)
- 深浅copy
02 昨日回顾 is id ==
- 字典初识:
- 查询速度快,存储大量的关联性数据
- 键:是不可变数据类型,比如str bool int tuple,并且是唯一的
- 值:可以是任意数据类型,对象
- 字典3.5x之前是无序的,3.6x按照初始时的顺序排列,3.7之后是有序的
- 增删改查:
- 增:setdefault(),dic['age']=18
- 删:pop键(可以设置返回值),clear,del dic['name']
- 改:dic['name']='alex'
- 查:dic['name'] dic.get['name'](不会报错)dic.keys() dic,values() dic.items()
03 具体内容
-
id is ==
- id 相同,值一定相同
- 值相同,id不一定相同
-
代码块
-
代码块:我们所有的代码都需要依赖代码块执行
-
一个文件就是一个代码块
-
交互式命令下一行就是一个代码块
下面这两条可以用pycharm和解释器做对比解释
-
-
两个机制:同一个代码块下,有一个机制;不同的代码块下,遵循另一个机制
-
同一个代码块下的缓存机制
- 前提条件:同一个代码块内
- 适用对象:int bool str
- 具体细则:所有的数字,,bool,几乎所有的字符串
- 优点:提升性能,节省内存
-
不同代码块下的缓存机制:小数据池
- 前提条件:不同代码块内
- 适用对象:int bool str
- 具体细则:-5~256数字,bool,满足规则的字符串
- 优点:提升性能,节省内存
-
总结
- 面试题考
- 回答:同一代码块适用一个缓存机制;不同代码块适用另一个缓存机制(小数据池)
- 小数据池:数字的范围是-5~256
- 缓存机制的优点:提升性能,节省内存
04 集合set
-
python基础数据类型:容器型的数据类型,他要求里面的元素是不可变的数据,但是他本事是可变的数据类型。**集合的无序的 ** {}
-
集合的作用:
- 列表的去重
- 关系测试:交集 并集 差集
- pass
-
-
-
增
set1.add('taibai')
-
迭代增加
set1.update('fdfdf')
print(set1)
-
-
删
-
remove:按照元素删除
set1.remove('alexsb')
-
pop:随机删除
set1.pop()
-
-
变相改值
set1.remove('太白金星')
set1.add('男神')
print(set1)
-
关系测试
-
交集
set1={1,2,3,4,5}
set2={4,5,6,7,8}
print(set1 &set2)
-
并集
print(set1 | set2)
-
差集
print(set1 - set2)
-
反交集
print(set1 ^ set2)
-
子集
print(set1 < set2)
-
超集
print(set2 > set2)
-
-
列表的去重***
l1=[]
set1=set(l1)
l1=list(set1)
-
05 深浅copy
-
赋值运算
- 锁壳。所以完全一样
-
浅copy (面试题:列表的切片是浅copy)
-
锁一层,往下随便造次不管。
-
影分身:l1 l2如果值相等,但id不一致 注释:分身的l1 和 l2中相应的槽位是对应内存中生成的众多槽位中相对应的的槽位值
-
在原列表添加或改变成别的元素相当于在众多内存的槽位中新占一个坑,跟锁的没关系
-
l1 = [1, 2, 3, [22, 33]]
l2 = l1.copy()
l1[0] = 90
print(l1)
print(l2)
-
-
深copy
-
至少锁两层
-
影分身:id不一致。l1 l2如果值相等,id也不一致,但好像相等的机会不大
-
在原列表添加或改变成别的元素相当于在众多内存的槽位中新占一个坑,跟锁的没关系
-
深copy
import copy
l1 = [1, 2, 3, [22, 33]]
l2 = copy.deepcopy(l1)
print(id(l1))
print(id(l2))
l1[-1].append(666)
print(l1)
print(l2)
-