小数据池与代码块

小数据池与代码块

1.id,is,==

在Python中,id是什么?id是内存地址,只要创建一个数据(对象)那么都会在内存中开辟一个空间,将这个数据临时加在到内存中,那么这个空间是有一个唯一标识的,就好比是身份证号,标识这个空间的叫做内存地址,也就是这个数据(对象)的id,可以利用id()去获取这个数据的内存地址:
name = '二狗'
print(id(name))  # 1585831283968
那么 is 是什么? == 又是什么?
== 是比较的两边的数值是否相等
而 is 是比较的两边的内存地址是否相等。 
如果内存地址相等,那么这两边其实是指向同一个内存地址。
可以说如果内存地址相同,那么值肯定相同,但是如果值相同,内存地址不一定相同。

2.代码块

Python程序是由代码块构造的。块是一个python程序的文本,他是作为一个单元执行的。
代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。
而作为交互方式输入的每个命令都是一个代码块。
什么叫交互方式?就是咱们在cmd中进入Python解释器里面,每一行代码都是一个代码块
而对于一个文件中的两个函数,也分别是两个不同的代码块

3.代码块的缓存机制

代码块的缓存机制
前提条件:在同一个代码块内。
机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,满足缓存机制则他们在内存中只存在一个,即:id相同。
小数据池支持的数据类型:int(float),str,bool
数字:
  在同一代码块下 只要内容相同就采用相同的内存地址(-5以后就不是)
  数字在做乘法的时候范围 -5 ~ 256  ****
  数字在做乘法的时候不能使用浮点数
字符串:
  在同一代码块下 只要内容相同就采用相同的内存地址
  乘法的时候总长度不能超过20   ****
  乘法的时候中文,特殊符号乘以1或0
布尔值:
  在同一代码块下 只要内容相同就采用相同的内存地址

4.小数据池

Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。
python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。
其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将~5-256的整数,和一定规则的字符串,放在一个‘池’(容器,或者字典)中,无论程序中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。
小数据池支持的数据类型:int(float),str,bool
数字:  -5 ~ 256   ****
字符串:
  只要内容相同就采用相同的内存地址
  乘法的时候总长度不能超过20   ****
  乘法的时候中文,特殊符号乘以0
布尔值:
  在同一代码块下 只要内容相同就采用相同的内存地址
 小数据池的验证方法,必须脱离代码块才能进行验证
 先执行代码块的规则,在执行小数据的规则 --(驻留机制)

5.总结

如果在同一代码块下,则采用同一代码块下的换缓存机制。
如果是不同代码块,则采用小数据池的驻留机制。
先执行代码块的规则,在执行小数据的规则 --(驻留机制)
posted @ 2019-07-11 22:19  LBZHK  阅读(170)  评论(0)    收藏  举报