python之内存与编码的那点事
一、初始编码
ASCII 码不支持中文 是py2版本中的默认编码
Unicode 万国码, 英文使用16位(即两个字节),中文使用32位(四个字节)
utf-8 美国最少使用八位(1字节), 欧洲使用十六位(2字节), 亚洲是二十四位(3字节) #最常用的编码方式
utf-16 最少使用十六位
gbk(国标)国家标准编码方式 其中中文要用十六位(2字节)表示,英文使用8位(1字节)
单位换算:
8位(bit) = 1字节(byte)
1024(byte) = 1(kb)
各种编码方式的发展:
首先是ASCII码,然后由于其中没有各国的语言,所以就出现了各国自己的国标码,由于国家之间的国标码没有统一互不兼容,会出现乱码,所以就出现了包含各国语言的unicode码,但是由于其至少要使用两个字节十六位表示,进行读取的时候会很浪费空间,故最后出现了utf-8这一编码方式,是可以节省空间的
二、二次编码
1.编码即编译的其中一步:就是将代码转换为字节码的过程.由于python属于编译型语言,故需要先将的代码编译成字节码,在转换成机器码给计算机识别,故将代码转换为字节码就是实现代码的第一步,我们一般用.encode()方法进行编码,.decode()的方法进行解码,用什么编码方式编的就用什么解
a = '你好黑'
a.encode('gbk') #编码 括号里放编码方式,将其变为什么编码
a.decode(''gbk') #解码 ,必须用同一种编码方式
注意:
1.用什么编码就用什么解码
2.在国内windows系统默认使用gbk编码方式
3.bytes 字节 是一个数据类型 是用来存储和传输
三、小数据池
注意:小数据池只针对数字,字符串和布尔值!
1.bool值 ,True False,i无论创建多少个变量指向它,他在内存中的地址都是一个
2.数字的小数据池范围是-5到256
3.字符串小数据池的规则:
1.自己定义的且不含有特殊字符的字符串没有限制,有特殊字符的字符串长度必须是为0或者1时,才能没有限制
2. 没有特殊字符的用乘法得到的字符串时:
a.当乘数为 0或者1的时候,是,是可以使用小数据池的
b.当乘数大于1的时候,字符串乘完以后的字符串数量y 要小于等于20.
3.当含有特殊字符进行乘法运算时:
a.字符串的长度要大于一
##满足以上的条件的数据才能使用小数据池!!!
要注意:"代码块内的缓存机制是和代码块之间的缓存机制不同的!
在执行一个代码块内的命令时,python会先检查这个值是不是已经存在,如果存在,则会直接调用这个存在的数据,这样就会导致在一个代码块中的两个变量指向同一个内存地址.
多个代码块中是使用小数据池的.!!!!
在进行,不同的代码块之间的命令时,pythonh会先查询小数据池,看看这个数据是否是满足小数据池的数据e如果是那会指向同一个地址,所以当两个代码块执行的时候,不满足小数据池的数据会得到两个不同的对象
综上所述,要通过 is 查看两个数据是否是一个对象,主要是查看内存地址是否一样.
四、id is ==
1.用法
id : #查询内存地址
== : #是判断两边的数据是不是一样
is : #是判断两边的数据是不是一个 内存地址
总结: ‘ ==’ 是 比较 符号 两边表达式 的值是否相等,而 ‘is' 是比较两边的对象是否是同一个内存地址。如内存地址相等,那么这两边指向同一个内存空间。
可以说,如果内存地址相同,那么值一定相同; 值相同,内存地址不一定相同。.
a = 100
b = 100 这两个是在一个代码块中
#### Python 程序是由代码块构造的,块是一个python程序的文本,它是作为一个执行单元的。
代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。在一个py文件中只要顶行写都是代码块,同一个代码块的内存地址是一个的。
python之内存与编码的那点事的更多相关文章
- 聊聊python 2中的编码
为什么需要编码: 计算机可以存储和处理二进制,那么从文字到计算机可以识别的二进制之间需要对应的关系,于是便有了ASCII,ASSCII使用7位字符,由于1byte=8bit,所以最高位补一个0,使用8 ...
- python基础——字符串和编码
python基础——字符串和编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用 ...
- Python 2 中的编码
在 Python 尤其是 Python2 中,编码问题是困扰开发者尤其初学者的一大问题.什么 Unicode/UTF-8/str ,又是 decode/encode 的,搞得人头都大了.其实不然,这有 ...
- Python基础之字符编码
前言 字符编码非常容易出问题,我们要牢记几句话: 1.用什么编码保存的,就要用什么编码打开 2.程序的执行,是先将文件读入内存中 3.unicode是父编码,只能encode解码成其他编码格式 utf ...
- Python系列之 - 字符编码问题
1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编 ...
- Python全栈开发之路 【第三篇】:Python基础之字符编码和文件操作
本节内容 一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件语句: if 条件成立: val = 1 else: val = 2 改成三元运算: val = 1 if 条件成 ...
- Python自动化开发 - 字符编码、文件和集合
本节内容 字符编码 文件操作 集合 一.字符编码 1.编码 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.解决思路:数字与符号建立一对一映射,用不同数字表示不同符号. ASCI ...
- python基础_字符编码
字符编码的历史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII 阶段二:为了满足中文,中国人定制了GBK 阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的 ...
- 六 Python基础 字符串和编码
字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特 ...
随机推荐
- 如何避免在EF自动生成的model中的DataAnnotation被覆盖掉
摘自ASP.NET MVC 5 网站开发之美 6.4 Metadata与数据验证 如果使用Database-First方式生成*.edms,那么所生成的类文件会在*.tt文件的层级之下,扩展名tt是一 ...
- 前后端分离, 前端如何防止直接输入URL进入页面?
转自:https://blog.csdn.net/weixin_41829196/article/details/80444870 前后端分离,如何防止用户直接在地址栏输入url进入页面,也就是判断用 ...
- AJAX原生JavaScript写法
GET方式 //创建XMLHttpRequest对象,为考虑兼容性问题,老版本的 Internet Explorer (IE5 和 IE6)使用 ActiveX 对象 var ajax = windo ...
- MQ测试
2015年8月13日23:14:52 测试RabbitMq ====================== 千兆局域网:send ≍10000/s receive ≍7000/s 百兆局域网:send ...
- Routing Manager for WCF4 z
http://www.codeproject.com/Articles/77198/Routing-Manager-for-WCF Download source Contents Features ...
- Linux中redis的安装与配置
redis官网地址:http://www.redis.io/ redis安装 在Linux下安装Redis非常简单,这里以2.8.3版本为例,具体步骤如下: 1.下载源码,解压缩后编译源码. $ mk ...
- 设计模式:组合(Composite)模式
设计模式:组合(Composite)模式 一.前言 关于Composite模式,其实就是组合模式,又叫部分整体模式,这个模式在我们的生活中也经常使用,比如说如果读者有使用Java的GUI编写过程序 ...
- 设计模式:桥接(Bridge)模式
设计模式:桥接(Bridge)模式 一.前言 写到这里,基本上就是对前面几种模式的扩展和区别了,可以看到我们前面的几种模式,很多时候都出现了重叠,这里要分清一个概念,模式并不是完全隔离和独立的,有 ...
- 在Clion里链接gtest
本来以为像之前链接boost一样,加个链接路径就好了,没想到报找不到gtest的符号,搞了半天,没弄明白啥原因. 网上也没搜到好方法,只能把gtest的源码加到项目里,然后在链接了. CMake配置如 ...
- June 27th 2017 Week 26th Tuesday
Happiness takes no account of time. 幸福不觉光阴过. At the beginning of this week, I planned to make some s ...