小数据池和深浅拷贝
小数据池
先执行代码块,不符合代码块才使用小数据池
数字
-
支持范围-5~256
-
is 和 ==
is:判断两个内存地址是否相同
==:判断两个值是不是相等
is相同的,==一定成立
==相同的,is不一定成立
字符串
- 字符串在做乘法的时候总长度不能超过20
- 自己定义的字符串,长度不限制,字符串必须由数字,字母,下划线组成
- 特殊字符(中文除外)最多允许有一个驻留
- 字符串*1就是赋值
代码块
数字
全部驻留
字符串
- 字符做乘法,总长度不能超过20
- 自定义的都驻留
- 乘数为1的时候,是赋值
总结
-
小数据池--支持:str,int,bool
-
小数据池数字:-5~256
-
小数据池字符串:乘法时长度不能超过20
如何自己驻留:
需要使用python模块:from sys import intern:
集合
定义
- 集合就是个没有值的字典,遵循:唯一,无序,元素可哈希
- 集合是无序的
用法
-
增
- s.update()#迭代添加
- s.add()
- 不支持加法
-
删
- s.pop() #随机删除
- s.remove("元素") #通过元素删除
- del s #删除整个集合
- clear #清空
-
改
先删,再加
-
查
for
-
去重
原理时集合中的元素唯一
-
其他操作
- 差集 s1-s2
- 并集 s1 | s2
- 交集 s1 & s2
- 对称差集--反交集 s1 ^ s2
- print(s1 > s2) 超集 判断s2是不是s1的子集
-
冻结集合
可变转换成不可变
frozenset({1,2,3,4,5})
-
去重
li=[]
print(list(set(li)))
深浅拷贝
-
定义
-
赋值:用的是同一个地址
-
浅拷贝:只拷贝第一层
会创建一个新的容器,两个列表公用一份地址
修改不可变数据类型,不变动,修改可变数据类型,变动
-
深拷贝 :拷贝了之后,就和之前的拷贝目标没什么关系,地址不同,修改不变动
-
-
怎么用
dic = {} # "v":4 li = [] #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}] for i in range(0,5): dic["v"] = i li.append(dic) print(li)
深拷贝: import copy li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}] l2 = copy.deepcopy(li) li[-1]['k'] = "a" print(li) print(l2)
-
在哪用
- 不让修改原数据的时候