is和==的区别以及编码、解码
一、is和==的区别
1,id( )
id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址:
s1 = 2
print(id(s1)) # 1514368064
s2 = 2
print(id(s2)) # 1514368064
s3 = 'alex'
print(id(s3)) # 43156680
s4 = "alex"
print(id(s4)) # 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编码:
python2中使用的是ASCII码,所以不支持中文,如果需要在python2中更改编码,需要在中文的开始编写:
#-*- coding: utf-8 -*-
2,编码回顾:
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或者GBK进行存储,怎么转换呢,在python中可以把文字信息进行编码,编码之后的内容就可以进行传输了,编码之后的数据是bytes类型的数据,其实啊,还是原来的数据只是经过编码之后表现形式发生了改变而已。
3,bytes 的表现形式:
1,英文 b'alex',英文的表现形式和字符串没什么两样;
2,中文b'\xe4\xb8\xad',这是一个汉字的UTF-8的bytes表现形式;
# 编码:
s0 = "alex"
print(s0.encode("utf-8")) # 将字符串编码成UTF-8,结果为:b'alex'
print(s0.encode("GBK")) # 将字符串编码成GBK,结果为:b'alex' s = "中"
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和==的区别以及编码、解码的更多相关文章
- is和 == 的区别以及编码.解码
一.is和==的区别 1,id( ) id( )是python的一个内置函数,通过id( )我们可以查看到一个变量表的值在内存中的地址: s = 2 print(id(s)) # 1514368064 ...
- 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 ...
随机推荐
- CCRenderTexture画点出现十字架"歪解"
在泰然论坛发个了帖子,没有人解答,内容如下: 遇到奇葩问题了,cocos2dx 2.2 CCRenderTexture* tex=CCRenderTexture::create(, ); tex-&g ...
- 善用php-fpm的慢执行日志slow log,分析php性能问题
众所周知,mysql有slow query log,根据慢查询日志,我们可以知道那些sql语句有性能问题.作为mysql的好搭档,php也有这样的功能.如果你使用php-fpm来管理php的话,你可以 ...
- 2PC&3PC
在分布式系统中,每一个机器节点虽然都能够明确地知道自己在进行实物操作过程中的结果是成功或失败,但却无法直接获取到其他分布式节点的操作结果.为了保持实物处理的ACID特性,就需要引入一个称为" ...
- php ocket通信机制
php 实例说明 socket通信机制 一,socket是什么 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通 ...
- HTML 文档的基本结构
HTML文件是什么? q HTML表示超文本标记语言(Hyper Text Markup Language). q HTML文件是一个包含标记的文本文件. q 这些标记保速浏览器怎样显示这个页面 ...
- 嵌入式驱动开发之spi---spi串口通信调试
一. 概念 SPI是 Serial Peripheral Interface(串型外部接口)的缩写.SPI接口有4根PIN脚,分别是: * SPICLK : 用于传输数据的同 ...
- Anaconda2+Theano 安装过程中的所有的坑。。。
写在前面的废话 上次搞theano安装还是一年多以前..anaconda才出到1.4,当时的AnacondaCE,直接安装完基本上theano啥的都一套成功.. 今天换了个电脑,重装anaconda, ...
- ajax优点
使用Ajax的最大优点,就是能在不更新整个页面的前提下维护数据.这使得Web应用程序更为迅捷地回应用户动作,并避免了在网络上发送那些没有改变的信息. 只要是JS调用异步通讯组件并使用格式化的数据来更新 ...
- 【JavaEE】SSH+Spring Security整合及example
到前文为止,SSH的基本框架都已经搭建出来了,现在,在这基础上再加上权限控制,也就是Spring Security框架,和前文的顺序一样,先看看需要加哪些库. 1. pom.xml Spring Se ...
- 《C++程序设计》朝花夕拾
(以后再也不用破Markdown写东西了,直到它有一个统一的标准,不然太乱了--) 函数签名 int f (int a, int b) ↑ ↑ ↑ ↑ 返回类型 函数名 形 式 参 数 其中,函数 ...