zoukankan      html  css  js  c++  java
  • 小数据池和编解码

    小数据池:

    是一种缓存机制,也被称为驻留机制

    小数据池只针对:整数,字符串,布尔值,其他数据类型不存在驻留机制

    在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 比较的时内存地址

  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/lgw1171435560/p/10059805.html
Copyright © 2011-2022 走看看