首页 > 其他分享 >代码块缓存机制

代码块缓存机制

时间:2022-11-28 17:36:55浏览次数:42  
标签:缓存 i1 代码 字符串 机制 驻留

id的作用:获取内存地址

nam
is作用:用于判断两个地址是否相等i1=1000i2 = 1000print(i1 is i2)>>>False

 

e = 'taibai'
print(id(name))
is作用:用于判断两个地址是否相等
i1=1000
i2 = 1000
print(i1 is i2)
>>>False

代码块:Python程序是由代码块构造的

一个模块、一个函数、一个类、一个文件都是代码块

 

代码块缓存机制:

前提条件:在同一个代码块内

机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。

适用对象:int(float) str、bool

非乘法得到的字符串满足代码块缓存机制:

s1 = '太白@!#*ewq'
s2 = '太白@!#*ewq'
print(s1 is s2)  # True

2,乘法得到的字符串分两种情况:

  2.1 乘数为1时,任何字符串满足代码块的缓存机制:

b1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1
a1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1

print(a1 is b1)  # True

2.2 乘数>=2时:仅含大小写字母,数字,下划线,总长度<=20,满足代码块的缓存机制:

s1 = 'old_' * 5
s2 = 'old_' * 5
print(s1 is s2)  # True

小数据池

小数据池,不同代码块的缓存机制,也称为小整数缓存机制,

Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。

Fpython会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。

str:字符串要从下面这几个大方向讨论(了解即可!):

1,字符串的长度为0或者1,默认都采用了驻留机制(小数据池)。

 

指定驻留。

from sys import intern
a = intern('hello!@'*20)
b = intern('hello!@'*20)
print(a is b)
#指定驻留是你可以指定任意的字符串加入到小数据池中,让其只在内存中创建一个对象,多个变量都是指向这一个字符串。

小数据池的优点:能够提高一些字符串,整数处理人物在时间和空间上的性能;需要值相同的字符串,整数的时候,直接从‘池’里拿来用,避免频繁的创建和销毁,提升效率,节约内存

 

标签:缓存,i1,代码,字符串,机制,驻留
From: https://www.cnblogs.com/liuxiaochang99/p/16932783.html

相关文章

  • 优秀代码写法
    1.判断为空StringorgUuid=request.getOrgUuid();StringorgLevel=request.getOrgLevel();if(StringUtils.isBlank(request.getOrgLevel())||StringUtils.isBlank(......
  • Myeclipse7.0注册码及注册机的源代码
    //Myeclipse7.0注册码及注册机的源代码//2009-01-0814:23Myeclipse7.0注册机的源代码,真强!这个源代码号称支持Myeclipse6.5和7.0两个//版本,java的代码,很爽!编译运行后输入想......
  • docker 搭建 Jenkins 容器 ,拉取git代码
    Docker搭建Jenkins容器,拉取git代码一、安装jenkins前提条件:宿主机安装docker1、拉取镜像dockerpulljenkins/jenkins2、查看镜像dockerimages【列表中有jenkin......
  • SortedWordCount源代码以及过程分析
    SortedWordCount源代码以及过程分析运行截图:]代码逻辑:Sort.java//Sort.java--目的key从大到小排序packagecom;importjava.io.DataInput;importjava.io.DataOutput;imp......
  • git-pull 远程代码与本地冲突解决方案
    一.产生冲突的原因团队其他成员修改了某文件并已提交入库,你在pull之前修改了本地该文件,等你修改完代码再pull时,这时会报错如下错误:error:Yourlocalchangestot......
  • 技术沙龙.:主题为《代码解析Castle(IOC)应用实例 -开源CMS 系统Cuyahoga》
    深圳.net俱乐部的第一次活动,我讲了Castle介绍性的一个主题,当时在场的很多人都是听得一头雾水,时隔一年后,IOC(Castle)的资料在中已经很丰富。我再次和大家一......
  • boost解析多节点的XML文件的常用代码范式
    std::stringparseBond(std::string&fileName){boost::property_tree::ptreeptree_root;try{boost::property_tree::read_xml......
  • redis + 注解自动缓存
    1、redis配置引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></depende......
  • 集群部署看过来,低代码@AWS智能集群的架构与搭建方案
    为了帮助充分利用AWS的托管服务快速构建起一套集群环境,彻底去掉“单一故障点”,实现最高的可用性,我们准备了《低代码智能集群@AWS的架构与搭建方案》看完本文,带你掌握“基于......
  • kooder安装及本地搜索git仓库代码
    kooder安装及本地搜索git仓库代码需求背景:如果需要从Git代码仓库查询某个配置项做批量的更新替换,如果一个一个找不合适且容易遗漏,需要借助第三方工具来模糊查询来实现。1......