python基础6
id == is
- id函数是返回值的内存地址
- == 是判断数据的值是否相同
- is 是判断数据的内存地址是否相同
什么是代码块
- 在python中,一个py文件、一个模块、一个类、一个函数就是代码块
两种缓存机制
-
机制一
- 在同一代码块内,一些不可变的数据类型的数据,会生成一个以数据值为key,一个存储变量名的set为value,类似字典的数据类型,当一个变量被赋值时,先进行右运算,会在代码块的类字典内找寻相同的值的key,如果有就在value中添加变量名,没有就会在类字典中添加键值对
- 优点:节省内存,提高效率
- 不可变的数据类型:int、str、bool、tuple
-
机制二(小数据池)
- 在不同的代码块中,一些特定的不可变的数据类型的数据,会提前生成一个类似于机制一中的类字典,不同于同一代码块,它是有范围的数字【-5~256之间的数字】、特殊的字符串、bool组成,因为范围变小,所以称为小数据池
集合 set
-
set特性
- 元素去重:即储存在set中的元素,不能重复,可以利用该特性给列表去重
- 储存在set中的元素必须是不可变的,即可哈希的,例如 int、str、tuple、bool
-
创建set的方法
-
方法一
-
set函数
s = set()
-
-
方法二
-
s = {value,value1,....}
-
{}
不是空的集合,是空的字典,空set只能是set()
-
-
-
set的增删查(set没有改的操作)
-
增
-
方法一【添加单个值】
s.add(value)
-
方法二【添加一个可迭代对象(set、列表、元组、str)】
s.update()
-
-
删
-
方法一【按照值删除元素,找不到值会报错】
set.remove(value)
-
方法二【按照值删除元素,找不到值不报错】
set.discard(value)
-
方法三【随机删除一个元素,set为空时报错,有返回值,就是被删除的元素】
set.pop()
-
方法四【清空set】
set.calear()
-
-
-
set的交并差、反交差【都有返回值是set类型】
-
交 【使用特殊字符
&
,返回两个集合的相同元素】s = {1,2,3} s1 = {2,3,4} print(s & s1) # {2,3}
-
并【使用特殊字符
|
,返回两个集合的和(将两个集合合并成一个集合)】s = {1,2,3} s1 = {2,3,4} print(s | s1) # {1,2,3,4}
-
差【使用字符
-
,A-B集合,将A集合内含有的B几个元素全部去除,再返回A集合】s = {1,2,3} s1 = {2,3,4} print(s- s1) # {1}
-
反交集【使用特殊字符
^
,返回两个集合不同的元素】s = {1,2,3} s1 = {2,3,4} print(s^s1) {1,4}
-
-
字典的超集和子集【返回值是bool】
-
超集【使用字符
>
】-
s = {1,2,3,4} s1 = {1,2} print(s > s1) #True
-
-
子集【字符
<
】-
s = {1,2,3,4} s1 = {1,2} print(s1 < s) #True
-
-
深浅copy
-
浅copy
-
只是在copy是时生成一个新的外壳,但是里面的元素,如果是集合的数据类型,还是使用原数据集合内引用数据类型的地址
l = [1,2,3,[1,2,3]] l1 = l.copy() l1[-1].append(4) print(l1) # [1,2,3,[1,2,3,4]] print(l) # [1,2,3,[1,2,3,4]]
- 两者的外壳不同,改变里面的存放的不可变数据时,没有任何问题,但是改变其可变的数据时,会使两个容器都发生改变
-
-
深copy
-
要引入copy模块,使用deepcopy方法
-
import copy l = [1,2,3,[1,2,3]] l1 = copy.deepcopy(l) l1[-1].append(1) print(l) print(l1)
- 在深copy时,会生成新的外壳,而里面的不可变的元素还是沿用原来的内存地址,而可变的数据,则另外生成新的外壳,而且里面的不可变的元素,还是如同外层一样,使用原来的内存地址,可变的元素,继续生成新的外壳,直到没有。
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!