id和is

在介绍代码块之前,先介绍两个方法:id和is,来看一段代码

 # name = "Rose"
# name1 = "Rose"
# print(id(name))
# print(id(name1)) # 两个id相同
# print(name == name1) # True
# print(name is name1) # True

执行结果

2257847297000
2257847297000
True
True Process finished with exit code 0

再来看一段代码

 l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(id(l1))
print(id(l2)) # 两个id不一样
print(l1 == l2) # True
print(l1 is l2) # False

执行结果

1403309626952
1403309626888
True
False Process finished with exit code 0

发现规律了吗?id是获取内存地址,is是判断两个数据的内存地址是否相同,这与==是不一样的,==是判断两个数据的值是否相同。

代码块

什么是代码块?

代码块是python程序的一个单元,一个模块,一个函数,一个类,一个文件都是一个代码块;在cmd命令行里,一条命令就是一个代码块

代码块有什么用?

python在执行一个代码块的初始化对象命令时,会将其名称和值存储在字典中,在之后遇到新的初始化对象命令时,就会检查其值是否在字典里,如果存在,会将其重用,也就是后一个对象与之前的对象指向同一个值,这既是代码块的缓存机制。看到这里你可能就明白了代码块缓存机制的好处:就是节省内存;提高效率。因为如果没有缓存机制的话就要重新开辟内存,开辟内存不仅要消耗内存,还会耽误时间。看到这里有人就可能会问了:既然缓存机制有这么多好处,那为什么不在全局而只是在代码块里使用呢?

满足缓存机制则他们在内存中只有一个,也就是id相同。

代码块缓存机制的适用范围:int(float),bool,str

int(float):任何数字在同一代码块下都会复用。

bool:True和False在字典中会以1,0方式存在,并且复用。

str:几乎所有的字符串都会符合缓存机制

小数据池

小数据池,也称为小整数缓存机制,或者称为驻留机制等等

小数据池是针对不同代码块之间的缓存机制,其适用范围也是int(float),bool,str

int: -5~256

bool: 都满足

str: 满足一定规则的会驻留

 # l1 = [1, 2, 3]
# l2 = [1, 2, 3]
# print(id(l1))
# print(id(l2)) # 两个id不一样
# print(l1 == l2) # True
# print(l1 is l2) # False

总结

如果在同一代码块下,则采用同一代码块下的换缓存机制。

  如果是不同代码块,则采用小数据池的驻留机制。

python代码块和小数据池的更多相关文章

  1. python代码块,小数据池,驻留机制深入剖析

    一,什么是代码块. 根据官网提示我们可以获知: 根据提示我们从官方文档找到了这样的说法: A Python program is constructed from code blocks. A blo ...

  2. Python基础学习Day6 is id == 区别,代码块,小数据池 ---->>编码

    一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 而作为交互方式输入的每个命令都是 ...

  3. Python 入门之代码块、小数据池 与 深浅拷贝

    Python 入门之代码块.小数据池 与 深浅拷贝 1.代码块 (1)一个py文件,一个函数,一个模块,终端中的每一行都是代码块 (代码块是防止我们频繁的开空间降低效率设计的,当我们定一个变量需要开辟 ...

  4. 《Python》 代码块、小数据池和编码转换

    一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 什么是代码块:一个py文件,一个函数,一个文件,一个类都是一个代码块. 作为交互方式输入的每一行 ...

  5. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  6. python基础知识四 小数据池,深浅拷贝,集合+菜中菜

    四.小数据池,深浅拷贝,集合+菜中菜 1小数据池 --缓存机制(驻留机制) ​ '==' 判断两边内容是否相等 ​ 'is' 基于内存地址进行判断是否相同 a = 10 b = 10 print(a ...

  7. python之路(内存,小数据池,编码等)

    代码块: python真正的代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块. 但是,在python终端交互模式下,每一条代码都是一个代码块 python在同一个代码块中的变量,初始化对象 ...

  8. python:id与小数据池与编码

    一.id与小数据池 id:查的是内存地址 a = 100 b = 100 print(a == b)#比较的数值 print(a is b)#比较的是id print(id(a),id(b))#id相 ...

  9. python之路---06 小数据池 编码

    二十二.小数据池, id()    进行缓存 1.小数据池针对的是: int, str, bool 2.在py文件中几乎所有的字符串都会缓存.   在cmd命令窗口中几乎都不会缓存   不同的解释器有 ...

随机推荐

  1. bzoj4671: 异或图

    bzoj4671: 异或图 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 ( ...

  2. [NOIp2012] 国王游戏(排序 + 贪心 + 高精度)

    题意 给你两个长为 \(n+1\) 的数组 \(a,b\) ,你需要定义一个顺序 \(p\) (\(p_0\) 永远为 \(0\)) 能够最小化 \[ \max_{i=1}^{n} \frac{\pr ...

  3. 小电阻之大作用——CAN终端电阻

    CAN总线终端电阻,顾名思义就是加在总线末端的电阻.此电阻虽小,但在CAN总线通信中却有十分重要的作用. 终端电阻的作用 CAN总线终端电阻的作用有两个: 1.提高抗干扰能力,确保总线快速进入隐性状态 ...

  4. poj 3186 Treats for the Cows(dp)

    Description FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for gi ...

  5. 可以精准解析国内外网站的DNS

    Pure DNS https://puredns.cn/ XsicoDNS https://dns.xsico.cn/ Fun DNS http://www.fundns.cn/ Bai DNS ht ...

  6. P1886 P2216 单调队列模板

    何为单调队列? 单调队列是一个队列(废话) 而且必须同时满足下标单调和值单调两个单调特性. 跟优先队列不同,优先队列直接使用堆(heap)来实现,如何删去特定下标元素?不明. 本人喜欢用单调队列存下标 ...

  7. JavaScript原型详解

    1,前言 下面是2008年Github创建以来,各种编程语言的排名情况 排名其中JavaScript自2015年之后就盘踞第一名,成为github上被使用最多的语言,早期,JS的使用还主要集中于浏览器 ...

  8. react-native中的style

    在 React Native 中,你并不需要学习什么特殊的语法来定义样式.我们仍然是使用 JavaScript 来写样式. 所有的核心组件都接受名为style的属性.这些样式名基本上是遵循了 web ...

  9. vue在body上面绑定enter事件

    mounted () { this.bodyListener = (e) => { if (e.keyCode === 13 && e.target === document.b ...

  10. QSS网址

    http://blog.csdn.net/liang19890820/article/details/51691212 https://www.cnblogs.com/cy568searchx/p/3 ...