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. 关于linux系统CPU篇--->不容易发现的占用CPU较高进程

    1.系统的CPU使用率,不仅包括进程用户态和内核态的运行,还包括中断处理,等待IO以及内核线程等等.所以,当你发现系统的CPU使用率很高的时候,不一定能找到相对应的高CPU使用率的进程 2.案例分析, ...

  2. 顶尖 API 文档管理工具 (Yapi)

    原文地址:https://www.jianshu.com/p/a97d2efb23c5

  3. pyCharm最新2018激活码

    本教程对jetbrains全系列可用例:IDEA.WebStorm.phpstorm.clion等 因公司的需求,需要做一个爬取最近上映的电影.列车号.航班号.机场.车站等信息,所以需要我做一个爬虫项 ...

  4. mtd-utils交叉编译安装

    一.获取源码并解压 存储于/home/zhangyi/work/psoc_ltp/tools-ltp-ddt中,解压后的源码存于上一层目录. 1.mtd-utils-2.0.0 wget ftp:// ...

  5. ActiveMQ下载与安装(Linux环境下进行)

    下载 官方网站:http:activemq.apache.org/ 安装(liunx) 1.将apache-activemq-5.12.0-bin.tar.gz(liunx环境下的压缩包)上传至服务器 ...

  6. layui table数据表格reload where参数保留问题

    layui table数据表格reload where参数保留问题 在使用layui过程中多多少少会遇到些问题 table reload 有个坑:reload时where参数会保留上次的参数,如果用 ...

  7. 安装LNMP笔记

    安装好centos7,主机ssl连不上 网卡设置为桥接模式或NAT模式 防火墙的原因 首先telnet本机22口 先更新yum源 yum update -y 安装网络常用工具:telnet trace ...

  8. week1总结

    week1总结 1. 开发上线工具流程以及规范类 规范: css注释:/* Comment Text*/ Css嵌套选择器:请不要让嵌套选择器的深度超过 3 层! 再说一遍: 永远不要嵌套 ID 选择 ...

  9. Polly 重试策略

    工作原理 Retry 基本重试: public static void Retry() { var random = new Random(); // Policy<> 泛型定义返回值类型 ...

  10. 从事三年java开发后, 我打算转人工智能

    作为一个2015年参加java培训,2016年计算机科学与技术本科毕业后一直从事java开发的程序员来说, 做出这一步真的不容易, 可是我没赶上java最火的时候,反而渐渐感受到了java的没落, 目 ...