Python(小数据池,集合,深浅拷贝)
一.小数据池
什么是小数据池
小数据池就是python中一种提高效率的方式,固定数据类型,使用同一个内存地址小数据池 is和==的区别
== 判断等号俩边的值是否相同
is 判断两个内存地址是否相同-
小数据池和代码块的关系
注意 : 先执行代码块后执行小数据池 小数据池 : 支持str,int,bool
数字范围 : -5~256
字符串 : 1.在做乘法的时候总长度不能超过20
2.自定义的字符串,长度不限制,字符串必须(字母,数字,下划线)组成
3.特殊字符(中文除外)定义一个时候,进行驻留
4.字符串1,其实就是赋值 代码块 : 一个文件,一个模块,一个函数,一个类
数字 : 全部驻留
字符串 : 1.字符串做乘法的时候总长度不能超过20
2.自定义的都驻留
3.字符串*1,其实就是赋值
4.python3.7 乘法的时候总长度不能超过4096
二.集合
- 集合介绍
什么是集合 : set就是dict类型的数据但是不保存value,只保存key.set也用{}表示
关键字 : set
集合特点 : 集合是可变的,集合内的元素是无序的,元素不可变并且唯一,天然去重 - 集合操作
- 增 :
set.update()迭代添加
set.add()集合添加 - 删 :
set.pop()随即删除
set.remove()制定元素删除
set.clear()清空元素
del s 删除整个集合 - 改 : 删除后添加
- 查 : for查找
- 其他操作 :
print(s1-s2)差集
print(s1|s2)并集
print(s1&s2)交集
print(s1^s2)反交集
print(s1>s2)父集
print(s1<s2)子集 - 冻结集合 : 把可变的转换成不可变的
frozenser()
- 增 :
s = frozenset(["武当","少林","峨眉","丐帮"])
dic = {s:'123'} # 冻结s后就可以正常使用了
print(dic)
三.深浅拷贝
-
先了解以下什么是赋值
对于list, set, dict来说, 直接赋值,其实是把内存地址交给变量,并不是复制一份内容,所以lst1的内存指向和lst2是一样的,lst1改变了,lst2也同样发生了改变.
lst1 = ["武当","少林","峨眉","丐帮"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("师太")
print(lst1) # ["武当","少林","峨眉","丐帮","师太"]
print(lst2) # ["武当","少林","峨眉","丐帮","师太"]
---------------------------------
dic1 = {"age":104,"name":"张三丰"}
dic2 = dic1
print(dic1) # {"age":104,"name":"张三丰"}
print(dic2) # {"age":104,"name":"张三丰"}
dic1['name']="灭绝"
print(dic1) # {"age":104,"name":"灭绝"}
print(dic2) # {"age":104,"name":"灭绝"} -
浅拷贝
浅拷贝,只会拷贝第一层,二层的内容不会拷贝,所以被称为浅拷贝
lst1 = ["张三丰","方丈","乞丐"]
lst2 = lst1.copy()
lst1.append("灭绝")
print(lst1)
print(lst2)
print(id(lst1), id(lst2))
# 两个lst完全不一样,内存地址和内容也不一样,但是实现了内存的拷贝
---------------------------------
lst1 = ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉"]]
lst2 = lst1.copy()
lst1[3].append("灭绝")
print(lst1) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉","灭绝"]]
print(lst2) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉","灭绝"]]
print(id(lst1[3]),id(lst2[3])) # id相同
# 只会拷贝第一层,二层的内容不会拷贝,因此第二层元素发生改变则都会改变. -
深拷贝
深度拷贝,把元素内部的元素完全进行拷贝复制,一个改变另一个不会跟着改变,当使用深拷贝时需要调用import copy.
import copy
lst1 = ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("灭绝")
print(lst1) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉","灭绝"]]
print(lst2) # ["张三丰","乞丐","方丈",["祥龙","伏虎","罗汉"]]
print(id(lst1[3]), id(lst2[3])) # id不同
# 元素内部的元素完全进行拷贝复制,一个改变另一个不会跟着改变