博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小数据池
阅读量:7178 次
发布时间:2019-06-29

本文共 1233 字,大约阅读时间需要 4 分钟。

a=5b=5print(a is b)c=-7d=-7print(c is d)e=300f=300print(e is f)

  这个代码在python命令行和py文件执行的结果不一样。

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

  如果是不同的代码块,他就会看这个两个变量是否是满足小数据池的数据,如果是满足小数据池的数据则会指向同一个地址。所以:i1、i2赋值语句分别被当作两个代码块执行,但是他们不满足小数据池的数据所以会得到两个不同的对象,因而is判断返回False。

对于数字:-5至256是会被加到小数据池中的,每次使用都是同一个对象对于字符串:1、如果字符串的长度是0或者1,都是默认进行缓存2、字符串长度大于1,但是字符串只有包含字母,数字,下划线时才会缓存3、用乘法得到字符串,    一、乘数为1,仅包含数字,字母,下划线时会被缓存,如果包含其他字符而长度<=1也会被驻存。    二、乘数大于1,仅包含数字,字母,下划线这个时候会被缓存,但字符串长度不能大于20.4、指定著驻留,我们可以通过sys模块中intern()函数来指定要驻留的内容。5、bool全部缓存
#当前实现保留了一个整数对象数组当你在-5和256之间创建一个整数时,你实际上值返回对现有对象的引用# 小数据池,一种数据缓存机制,也被称为驻留机制,各大编程语言中都有类似的东西,小数据池都是值的同一个对象# 小数据池值针对:整数,字符串,布尔值,其他数据类型不存在驻留机制
Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将~5-256的整数,和一定规则的字符串,放在一个‘池’(容器,或者字典)中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。优点:能够提高一些字符串,整数处理人物在时间和空间上的性能;需要值相同的字符串,整数的时候,直接从‘池’里拿来用,避免频繁的创建和销毁,提升效率,节约内存。缺点:在‘池’中创建或插入字符串,整数时,会花费更多的时间。

 

转载于:https://www.cnblogs.com/Xingtxx/p/9748943.html

你可能感兴趣的文章
python(1)汇率换算
查看>>
spring cloud微服务分布式云架构- Config 快速开始
查看>>
十一课堂|通过小游戏学习Ethereum DApps编程(1)
查看>>
【区块链+游戏实践】火币区块链产业专题报告-游戏产业的割裂与重构
查看>>
批量删除Maven下载失败的文件及文件夹
查看>>
前端学习是个无底洞,要给自己一个定位
查看>>
使用 ELK 来分析你的支付宝账单
查看>>
[Android] 列表控件(RecycleView,GridView)
查看>>
vue源码阅读,学习vue的rollup打包工具,write一个自己的工具函数库
查看>>
主流 SSM 框架Java 后台 springmvc mybatis 有代码生成器
查看>>
vue点击当前路由,如何实现刷新当前页
查看>>
iOS 常用布局方式之Constraint
查看>>
初识zookeeper和安装
查看>>
test
查看>>
【Camera专题】-Camera帧率、黄光环境下拍照闪红问题-【展讯平台】
查看>>
Android NDK 环境搭建 之 起始篇NDK HelloWorld
查看>>
this指向问题
查看>>
对 python 中变量值交换的一些思考
查看>>
iOS 数据优化之处理HTML字符串
查看>>
vue.js无缝滚动
查看>>