is和 == 的区别以及编码.解码
一、is和==的区别
1,id( )
id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址:

s = 2
print(id(s)) # 1514368064
s = 2
print(id(s)) # 1514368064
s = 'alex'
print(id(s)) # 43156680
s = "alex"
print(id(s)) # 43156680
lst = [1, 2, 4]
print(id(lst)) # 43164168
lst1 = [1, 2, 4]
print(id(lst1)) # 41362568
tup = (1, 2)
tup1 = (1, 2)
print(id(tup)) #39978312
print(id(tup1)) #39978376
# 我们发现,数字和字符串的数据地址是一样的. 列表和元组的数据地址是不一样的.

小数据池(常量池):把我们使用过的值存储在小数据池中,供其他数据使用。
小数据池给数字和字符串使用,其他数据类型不存在。
对于数字:-5~256是会被加到小数据池中的,每次使用都是同一个对象。
对于字符串:
1,如果是带特殊字符的,那么不会被添加到小数据池,每次都是新的;
2,如果是单一字母*n的情况,如“a”*20,在20个单位内(包含20个)是可以的,超过20个单位就不会添加到小数据池;
注意(一般情况下):在py文件中,如果你只是单纯的定义一个字符串,那么一般情况下都会被添到小数据池中,我们可以这样认为:在使用字符串的时候,python会帮我们把字符串进行缓存,在下次使用的时候直接指向这个字符串即可,可以节省很多内存。
这个问题千万不要纠结,因为官方没有给出一个完美的结论和定论,所以只能是自己摸索
说了这么多,这个id( )和is有什么关系呢?注意,is比较的就是id( )计算出来的结果,由于id( )是帮我们查看某数据(对象)的内存地址,那么is比较的就是数据(对象)的内存地址,即我们通过is可以查看两边使用的是否是同一个对象。
双等(==)表示的是判断是否相等,注意,这个双等比较的是具体的值。
总结:==比较的是两边的值是否一样;is比较的是内存地址是否一样,即是不是同一个对象。
二、编码的问题
1,python2中使用的是ASCII码,所以不支持中文,如果需要在python2中更改编码,需要在中文的开始编写:
#-*- encoding:utf-8 -*-
编码回顾:
1,ASCII:最早的编码,里面有英文大写字母,小写字母,数字,一些特殊字符,没有中文。8个bit,1个byte。
2,GBK:中文国标码,里面包含了ASCII编码,16个bit,2个byte。
3,unicode:万国码,里面包含了全世界所有国家的文字编码,32个bit,4个byte,包含了ASCII。
4,UTF-8:可变长度的万国码,是unicode的一种实现,最小字符占8位
英文:8bit 1byte
欧洲文字:16bit 2byte
中文:24bit 3byte
综上,除了ASCII码以外,其他信息不能直接转换。
在python3的内存中,在程序运行阶段使用的是unicode编码,因为unicode是万国码,什么内容都可以进行显示,那么在数据传输和存储的时候由于unicode比较浪费空间和资源,需要把unicode转存成UTF-8或者CBK进行存储,怎么转换呢,在python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是bytes类型的数据,其实啊,还是原来的数据只是经过编码之后表现形式发生了改变而已。
bytes 的表现形式:
1,英文 b'alex',英文的表现形式和字符串没什么两样;
2,中文b'\xe4\xb8\xad',这是一个汉字的UTF-8的bytes表现形式;

# 编码:
s = "alex"
print(s.encode("utf-8")) # 将字符串编码成UTF-8,结果为:b'alex'
print(s.encode("GBK")) # 将字符串编码成GBK,结果为:b'alex' s = "中"
print(s.encode("UTF-8"))
print(s.encode("GBK"))
s1 = s.encode("UTF-8") # 中文编码成UTF-8,结果为:b'\xe4\xb8\xad'
s2 = s.encode("GBK") # 中文编码成GBK,结果为:b'\xd6\xd0' # 解码:
print(s1.decode("UTF-8")) #结果为:中
print(s2.decode("GBK")) #结果为:中

注意:用什么进行编码就要用什么进行解码。
记住:英文编码之后的结果是原字符串一致,中文编码之后的结果根据编码的不同,编码结果也不同,我们能肯定,一个中文UTF-8是3个字节。一个GBK的中文编码是2个字节。
is和 == 的区别以及编码.解码的更多相关文章
- java中文乱码解决之道(五)-----java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
- url编码解码-js编码、C#编码
JS编码解码 函数一定义和用法encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串,含有 U ...
- java中文乱码解决之道(五)—–java是如何编码解码的
原文出处:http://cmsblogs.com/?p=1491 在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有 ...
- java是如何编码解码的
在上篇博客中LZ阐述了java各个渠道转码的过程,阐述了java在运行过程中那些步骤在进行转码,在这些转码过程中如果一处出现问题就很有可能会产生乱码!下面LZ就讲述java在转码过程中是如何来进行编码 ...
- BOM / URL编码解码 / 浏览器存储
BOM 浏览器对象模型 BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种对象与对象之间层次关系的模型,浏览器对象模型提供了独立于内容的.可以与浏览器窗口进行互动的 ...
- ajax请求参数中含有特殊字符"#"的问题 (另附上js编码解码的几种方法)
使用ajax向后台提交的时候 由于参数中含有# 默认会被截断 只保留#之前的字符 json格式的字符串则不会被请求到后台的action 可以使用encodeURIComponent在前台进行编码, ...
- JavaScript中的编码解码
1.URI 统一资源标识符(URI)是一个用于标识某一互联网资源名称的字符串.,该种标识允许用户对任何(包括本地和互联网)的资源通过特定的协议进行交互操作.Web上可用的每种资源 -HTML文档.图像 ...
- CKKS :Part1,普通编码/解码
这篇文章,翻译于:[CKKS EXPLAINED: PART 1, VANILLA ENCODING AND DECODING] 主要介绍为CKKS中编码/解码做铺垫,讲一些基础知识 介绍 同态加密是 ...
- C# base 64图片编码解码
使用WinForm实现了图片base64编码解码的 效果图: 示例base 64编码字符串: /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD ...
随机推荐
- 【Web】Sublime Text 3 安装+注册+汉化
Sublime Text 介绍 Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它 ...
- 【Java】JavaWeb 登录检查及界面跳转
场景 一般javaweb网站都有用户登录,而有一些操作必须用户登录才能进行,常见流程:用户请求-->后台判断是否登录-->没登录跳转到登录界面,登录用户正常操作 解决思路 在用过滤器过滤请 ...
- elasticsearch中文发行版 安装
参见: https://github.com/medcl/elasticsearch-rtf 具体步骤参见:ubuntu安装elasticsearch-rtf elasticsearch-head 安 ...
- Linux centos 连接网络
1.在安装过程中不要选择网络适配器,其他正常执行 2.编辑 [root@zb ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 一般安装完软件,打开et ...
- 第25章:MongoDB-文档存储[理解]
① 将文档插入到MongoDB的时候,文档是按照插入的顺序,依次在磁盘上相邻保存 因此,一个文档变大了,原来的位置要是放不下这个文档了,就需要把这个文档移动到集合的另外一个位置,通常是最后,能放下这个 ...
- 第14章:MongoDB-聚合操作--聚合管道
① 聚合管道是MongoDB2.2版本引入的新功能.它由阶段(Stage)组成,文档在一个阶段处理完毕后,聚合管道会把处理结果传到下一个阶段. 每个阶段用阶段操作符(Stage Operators)定 ...
- DOS的几个常用命令
1.rem:注释 DOS中的注释,其后面的内容会被自动忽略.双冒号(::)也有相同的效果 相当于R语言和Python中的# 2.set:设置变量 set var = 1 将1赋值给变量var 打印出来 ...
- Ueditor Word图片转存交互
三.Word图片转存交互 1.图片转存原理 所谓word图片转存,是指UEditor为了解决用户从word中复制了一篇图文混排的文章粘贴到编辑器之后,word文章中的图片数据无法显示在编辑器中,也无法 ...
- day37(类加载器)
类的加载器:将class文件加载到JVM中执行这个文件. Java中将类加载器分成三类: 引导类加载器: JAVA_HOME/jre/lib/rt.jar | 扩展类加载器: JAVA ...
- Codeforces812A Sagheer and Crossroads 2017-06-02 20:41 139人阅读 评论(0) 收藏
A. Sagheer and Crossroads time limit per test 1 second memory limit per test 256 megabytes input sta ...