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

  • 相关阅读:
    leetcode:Valid Parentheses(有效括号匹配)
    leetcode:Remove Nth Node From End of List (移除从尾部数的第N个节点)
    leetcode:Letter Combinations of a Phone Number(手机号码的字母组合)
    leetcode:4Sums(四个数相加的和)
    leetcode:3Sum Closest
    leetcode:3Sum (三个数的和)
    leetcode:Longest Common Prefix(取最长字符串前缀)
    php数据访问
    PHP 基础知识测试题
    面相对象设计模式
  • 原文地址:https://www.cnblogs.com/lgw1171435560/p/10059805.html
Copyright © 2011-2022 走看看