1、小数据池
python程序是由代码块构成的,一个代码块的文本作为python程序的执行单元。
代码块:一个模块,一个函数,一个类,甚至一个command命令都是一个代码块,一个文件也是一个代码块,eval()和exec()执行的时候也是代码块。
什么是命令行?
我们再控制台CMD中输入python进入的就是python的command模式。
 
一个command命令就是一个代码块

小数据池:一种数据缓存机制,也被称为驻留机制,也相当于常量池。(string  iterning)
小数据池只正对:整数(int),字符串(str),布尔型(bool)(都是不可变的数据类型)
在py文件中,几乎所有的字符都会缓存。
id() 查看变量的内存地址
a = 123
print(id(a))
#

   

在python中 对-5到256之间的整数会被驻留在内存中,讲一定规则的字符串缓存,在使用的时候,内存中只会创建一个该数据的对象,保存到小数池中,在使用的时候,直接从小数池中获取对象的内存引用,而不需要创建一个新的数据,这样会节省更多的内存区域。
 
优点:能够提高一些字符串,证书的处理速度,省略创建对象的过程。
缺点:在小数据池中创建或者插入新的内容,会花费较多的时间。
 
对于数字:-1~256是会被加到小数池中,每一次使用都是同一对象。
 
对于字符串:
 
    1、如果字符串的长度是0 或者1,都会默认进行缓存。
    2、字符长度大于1,但是字符串中只包含数字,字母,下划线时才会缓存
    3、用到乘法的字符串,①乘数为1,仅包含数字,字母,下划线时才会被缓存。如果包含其他字符,而长度小于等于1 也会被驻存  ②乘数大于1,仅包含数字,字母,下划线时会被缓存,但字符串长度不能大于20.
    4、指定驻留,我们可以通过sys模块总的intern()函数来指定要驻留的内容。
 
 
2、is 和 ==
 
    == 判断左右两端的值是否相等,是不是一致,(比较内容)
    is  判断左右两端的内存地址是否相等,如果返回 True,那可以确定这两个变量使用的是同一个对象。(比较内存地址)
 
当两个变量指向同一对象时,is 是 True  ==也是True

如果在py 文件中写的字符串,几乎都是缓存的,在cmd中写的几乎都不会缓存。

a = 257
b = 257
print(id(a)) #
print(id(b)) #
print(a is b) # True

  两个对象 内存地址是不一样的

lst1 = [1,2,3] # 两个对象 内存地址是不一样的
lst2 = [1,2,3]
print(id(lst1)) #
print(id(lst2)) #

  

在创建字符串之前,会先去小数池比对,是否已经存在了该字符串,如果存在了,就不再创建新的了,直接拿原来存在的数据,省略掉反复重复创建字符串的过程,节约内存。
 
 
3、编码的补充
 
   1、回顾编码
 
           ASCII:最早的编码,里边有英文大写字母,英文小写字母,数字,一些特殊字符,没有中文, 8bit,一个byte
           GBK:包含ASCII,中文(主要),日文,韩文,繁体文字。16bit ,2byte
           unicode:万国码,包含ASCII,gbk,big5. ...32bit,  4byte
           UTF-8:可变长度的unicode
                1、英文: 8bit ,1 byte
                2、欧洲文字:16bit , 2byte
                3、中文: 24bit , 3byte
不同的编码间不能随意转化,需要通过媒介(unicode)转化。
在python3中,默认的编码是unicode,我们的字符串就是unicode
在python2 中,默认的编码是ASCII,Cpython,c语言的默认编码是ASCII
 
unicode的弊端:在存储和传数数据的时候不能直接使用unicode,必须要对字符串进行编码,编码成ASCII类型。
bytes:字节形式的字符串,不是给人看的,是给机器用的。非ASCII中的内容,展示的时候都是 \x..如果是ASCII中的内容,原样输出。
 
1、encode(编码格式) 编码
2、decode(编码格式) 解码
 
UTF-8 和GBK是不能直接转化的,必须使用unicode来转化。
m = '今天晚上想看什么书!'
a = m.encode('gbk')
print(a)
b = m.encode('utf-8')
print(b) # b'\xbd\xf1\xcc\xec\xcd\xed\xc9\xcf\xcf\xeb\xbf\xb4\xca\xb2\xc3\xb4\xca\xe9\xa3\xa1'
# b'\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x99\x9a\xe4\xb8\x8a\xe6\x83\xb3\xe7\x9c\x8b\xe4\xbb\x80\xe4\xb9\x88\xe4\xb9\xa6\xef\xbc\x81'

 

python -- 小数据池 is和 == 再谈编码的更多相关文章

  1. python小数据池 is和 == 再谈编码

    1. 小数据池, id() 小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. id() 查看变量的内存地址 2. is和==的区别 is 比较的是内存地址 == ...

  2. 小数据池 is和== 再谈编码

    昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...

  3. 小数据池/is和==/再谈编码作业

    # 1,老男孩好声选秀大赛评委在打分的时候呢, 可以输入分数. 假设, 老男孩有10个评委. 让10个评委进行打分, 要求, 分数必须高于5分, 低于10分.将每个评委的打分情况保存在列表中. pin ...

  4. 小学生都能学会的python(小数据池)

    小学生都能学会的python(小数据池) 1. 小数据池. 目的:缓存我们字符串,整数,布尔值.在使用的时候不需要创建过多的对象 缓存:int, str, bool. int: 缓存范围 -5~256 ...

  5. python基础之小数据池,is和==区别 编码问题

    主要内容 小数据池,is和==区别 编码问题 小数据池 一种缓存机制,也称为驻留机制,是为了能更快提高一些字符串和整数的处理速度is 和 == 的区别 == 主要指对变量值是否相等的判断,只要数值相同 ...

  6. python 小数据池,代码块, is == 深入剖析

    python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. 总结 一,id,is,== 在Python中,id是什么?id是内存地址,那就有人问了, ...

  7. Python小数据池,代码块

    今日内容一些小的干货 一. id is == 二. 代码块 三. 小数据池 四. 总结 python小数据池,代码块的最详细.深入剖析   一. id is == 二. 代码块 三. 小数据池 四. ...

  8. 浅谈Python小数据池

    什么是小数据池 小数据池是python中提高效率的一种方式,固定数据类型的相同值使用同一内存地址. id 用于获取开辟空间的内存地址 代码块 一个文件,一个模块,一个函数,一个类,终端中的每一行代码都 ...

  9. python 小数据池 is和 == 编码解码

    ########################总结######################### 今日主要内容 1. 小数据池, id() 小数据池针对的是: int, str, bool 在p ...

随机推荐

  1. 小米手机跨域问题,返回resphone:undefined,status 0

    小米手机跨域问题,返回resphone:undefined,status 0我小米note2的手机登录不上,返回resphone:undefined,status 0 我手机登录不了的问题解决了,后台 ...

  2. java内存机制和GC垃圾回收机制

    Java 内存区域和GC机制 转载来源于:https://www.cnblogs.com/zhguang/p/3257367.html 感谢 目录 Java垃圾回收概况 Java内存区域 Java对象 ...

  3. Linux Postfix 服务

    Linux Postfix 服务 postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)开源软件.能够很好地兼容 Sendmail服务程序,可以方便 Sendm ...

  4. C# 开发AliYun(阿里云) 小蜜调用接口代码

    using System; using System.Collections.Generic; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Excepti ...

  5. AndroidStudio生成APK注意的几个问题

    生成APK遇到两个问题:一是生成的APK安装失败(没有勾选V1所致),二是生成APK后,百度与谷歌地图不显示(SHA1值改变所致). 通过Build>Generate Signed APK生成A ...

  6. nginx 配置反向代理

    之前的前端是8123端口,使用此端口让nginx的反向代理. vim /etc/nginx/conf.d/80-fr.conf upstream cats{ server 127.0.0.1:8123 ...

  7. 说说Python中的闭包

    Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西. 闭包的概念 我们尝试从概念上去理解一下闭包. 在一些语言中,在函数中可以(嵌套)定义另一个 ...

  8. Java后台判断是否是ajax请求,并进行处理

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...

  9. PostgreSQL 与 PostGIS

    PostgreSQL 是一种对象-关系型数据库管理系统(ORDBMS),也是目前功能最强大.特性最丰富和最复杂的自由软件数据库系统.它起源于伯克利(BSD)的数据库研究计划,目前是最重要的开源数据库产 ...

  10. springboot与Mybatis结合

    一:使用generator,关联上数据库生成相关文件, 如 mapping/UserMapper.xml,mapper/UserMapper.java,model/User.java; generat ...