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

    # 字符编码计算机底层储存的都是二进制码
    # 而我们将这些二进制码进行规律排列就诞生了字符编码
    # 最初的编码是ACCII编码,他是采用了八位二进制码,主要包含了英文数字和一些特殊字符
    # 八位二进制码最多只能包含256种变化
    # 中国所使用的是GBK国标编码采用16位二进制码,而我们将八位二进制码称为一个字节
    # 为了统一标准后续推出了万国码unicode编码
    # unicode编码可以表示上亿字符,对于内存硬盘是一种很大的浪费,所以就有了现在的UTF-8,UTF-16压缩的unicode编码
    # UTF-8中如果是英文数字,则使用ACCII编码,占用一个字节,如果是汉字则是三个字节
    # 00000000 00000000 00000000 10101010 假设这个表示内存中的10,那么前三个字节就属于浪费空间,而在UTF-8编码中就去除了这些填补的字节
    
    # 提及编码我们就涉及到内存的问题,在python3中默认使用的是unicode编码
    # 在python中有两个优化机制,一个是代码块的缓存机制,一个是小数据池机制
    
    # 前提条件:在同一个代码块内。
    # 机制内容:Python在执行同一个代码块的初始化对象的命令时,会检查是否其值是否已经存在,如果存在,会将其重用。
    # 换句话说:执行同一个代码块时,遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中,在遇到新的变量时,会先在字典中查询记录,
    # 如果有同样的记录那么它会重复使用这个字典中的之前的这个值。所以在你给出的例子中,文件执行时(同一个代码块)会把i1、i2两个变量指向同一个对象,
    # 满足缓存机制则他们在内存中只存在一个,即:id相同。
    
    # 适用对象: int(float),str,bool。
    # 对象的具体细则:(了解)
    #   int(float):任何数字在同一代码块下都会复用。
    #   bool:True和False在字典中会以1,0方式存在,并且复用。
    #   str:几乎所有的字符串都会符合缓存机制,具体规定如下
    
    s1 = '天空!@#wer&*'
    s2 = '天空!@#wer&*'
    print(s1 is s2)
    # 打印为True,前提是在同一个代码块下,如果非同一代码块则为False
    
    
    # 小数据池,不同代码块的缓存机制,也称为小整数缓存机制,或者称为驻留机制等等,博主认为,只要你在网上查到的这些名字其实说的都是一个意思,叫什么因人而异。
    # 那么到底什么是小数据池?他有什么作用呢?
    # 前提条件:在不同一个代码块内。
    # Python自动将-5~256的整数进行了缓存,当你将这些整数赋值给变量时,并不会重新创建对象,而是使用已经创建好的缓存对象。
    # python会将一定规则的字符串在字符串驻留池中,创建一份,当你将这些字符串赋值给变量时,并不会重新创建对象, 而是使用在字符串驻留池中创建好的对象。
    #   其实,无论是缓存还是字符串驻留池,都是python做的一个优化,就是将~5-256的整数,和一定规则的字符串,放在一个‘池’(容器,或者字典)中,无论程序
    # 中那些变量指向这些范围内的整数或者字符串,那么他直接在这个‘池’中引用,言外之意,就是内存中之创建一个。
    
    # 适用对象: int(float),str,bool
    # int:那么大家都知道对于整数来说,小数据池的范围是-5~256 ,如果多个变量都是指向同一个(在这个范围内的)数字,他们在内存中指向的都是一个内存地址。
    # 字符串的长度为0或者1,默认都采用了驻留机制(小数据池)。
    # 字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留。
    # 用乘法得到的字符串,分两种情况。
    # 仅含大小写字母,数字,下划线,默认驻留,且乘数为一,默认驻留
    # 仅含大小写字母,数字,下划线,总长度<=20,默认驻留
    
    # 指定驻留。
    from sys import intern
    a = intern('hello!@'*20)
    b = intern('hello!@'*20)
    print(a is b)
  • 相关阅读:
    (6)STM32使用HAL库实现modbus的简单通讯
    (4)STM32使用HAL库实现串口通讯——理论讲解
    (3)STM32使用HAL库操作外部中断——实战操作
    (2)STM32使用HAL库操作外部中断——理论讲解
    对图片进行压缩、水印、伸缩变换、透明处理、格式转换操作1
    文件压缩、解压工具类。文件压缩格式为zip
    Bean与Map的转换 和 Map与Bean的转换
    正则 身份证的验证
    金钱处理工具类 人民币转换为大写
    正则表达式工具类,验证数据是否符合规范
  • 原文地址:https://www.cnblogs.com/tengx/p/11696636.html
Copyright © 2011-2022 走看看