小数据池和编解码
小数据池:
是一种缓存机制,也被称为驻留机制
小数据池只针对:整数,字符串,布尔值,其他数据类型不存在驻留机制
在python中对-5到256之间的整数会被驻留在内存中,将一定规则的字符串缓存,在使用的时候,内存中只会创建一个改数据的对象,保存在小数据池中,当使用的时候直接从小数据池中获取对象的内存引用,而不需要创建一个新的数据,这样会节省更多内存.
优点:能够提高一些字符串,整数的处理速度,省略的创建对象的过程.
缺点:在'池'中创建或者插入新的内容会花费更多的时间.
对于数字:-5~256是会被加到小数据池中的,每次使用都是同一个对象.
对于字符串:
1.如果字符串的长度是0或者1,都会默认进行缓存.
2.字符串长度大于1,但是字符串中只包含字母,数字,下划线时才会缓存
3.用乘法的到的字符串①.乘数为1,仅包含字母,数字,下划线时才会缓存
包含其他字符,而长度<=1也会被驻存,②.乘数大于1,仅包含数字,字母,下划线这个时候会被缓存,但字符串长度不能大于20
4.指定驻留,我们可以通过sys模块中的intern()函数来指定驻留的内容.
在执行同一个代码块的初始化对象的命令时,会检查其值是否已经存在,如果存在,会将其重用,换句话说:执行同一个代码块时,遇到初始
化对象的命令时,它会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,如果有同样的记录那么他会重复使用这个字典中的之前的值,所以在你给出的例子,文件执行时(同一个代码块)会把a,b两个变量指向同一个对象.
如果是不同的代码块,他就会看这俩个变量是否是满足小数据池的要求,如果是满足小数据池的要求则会指向同一个地址,所以:a,b的赋值语句分别被当作两个代码块执行,但是他们不满足小数据池的要求所以会得到两个不同的对象,因而is判断返回False.
记住:英文编码之后的结果和源字符串一致,中文编码之后的结果根据编码的不同,编码的结果也不同,一个中文的utf-8编码是3个字节,一个GBK的中文编码是2个字节,编码之后的类型就是bytes类型,在网络传输和存储的时候我们python是保存和存储的bytes(字节码串)类型,那么在对方接受的时候,也是接受的bytes类型的数据.我们可以使用decode()来进行解码操作,把bytes类型的数据还原会我们熟悉的字符串.
encode()是编码
decode()是解码,以什么方式编码,就得用什么方式解码,不然就会显示乱码!
== 比较的时内容
is 比较的时内存地址