一、is和==的区别:

  1、id()函数

    通过id()可以查看到⼀一个变量表⽰的值在内存中的地址.

#字符串
a1 = "alex"
a2 = "alex"
print(id(a1),id(a2)) #2250772541544 2250772541544
#int
a1 = 123
a2 = 123
print(id(a1),id(a2)) #2004253536 2004253536
#bool
a1 = True
a2 = True
print(id(a1),id(a2)) #2003759264 2003759264
#字符串、int、bool等的数据地址都是一样的
#列表
a1 = ["张无忌","周芷若"]
a2 = ["张无忌","周芷若"]
print(id(a1),id(a2))  #2028760057352 2028760058056
#元组
a1 = ("扶摇","杨幂")
a2 = ("扶摇","杨幂")
print(id(a1),id(a2))  #1494052752008 1494052752072
#字典
a1 = {"楚乔":"赵丽颖","宇文玥":"林更新"}
a2 = {"楚乔":"赵丽颖","宇文玥":"林更新"}
print(id(a1),id(a2)) #1620881530672 1620881530744#列表、元组、字典等数据地址都不一样

#结果⼀致, 但是在终端中是不⼀致的. 所以在python中,命令行代码和py文 件中的代码运行的效果可能是不一样的#⼩数据池(常量池): 把我们使用过的值存储在小数据池中.供其他的变量使用. 小数据池给数字和字符串串使用, 其他数据类型不存在. 对于数字: -5~256是会被加到小数据池中的. 每次使用都是同一个对象. 对于字符串: 1. 如果是纯文字信息和下划线. 那么这个对象会被添加到小数据池  2. 如果是带有特殊字符的. 那么不会被添加到小数据池. 每次都是新的  3. 如果是单一字⺟母*n的情况. 'a'*20, 在20个单位内是可以的. 超过20个单位就不会添加 到小数据池中#注意(一般情况下): 在py⽂文件中. 如果你只是单纯的定义一个字符串. 那么一般情况下都是会 被添加到小数据池中的. 我们可以这样认为: 在使用字符串的时候, python会帮我们把字符串 进行缓存, 在下次使用的时候直接指向这个字符串即可. 可以节省很多内存.

  2、==判断两边的值     #双等表⽰的是判断是否相等, 注意. 这个双等比较的是具体的值.⽽不是内存地址  

   3、is 判断内存的地址

    id()和is有什么关系呢. 注意. is比较的就是id()计算出来的结果. 由于id是帮我 们查看某数据(对象) 的内存地址. 那么is比较的就是数据(对象)的内存地址. 最终我们通过is可以查看两个变量使⽤用的是否是同一个对象.

a1 = "杀阡陌"
a2 = "杀阡陌"
print(a1 == a2) #True
print(a1 is a2) #True
# 原因是有小数据池的存在 导致两个变量指向的是同一个对象 

a1 = [1,2,3]
a2 = [1,2,3]
print(a1 == a2)  #True  值是一样的
print(a1 is a2)  #True  内存地址是不一样的

  

  编码的回顾:

    1、ASCII:有字母的大小写,数字,特殊字符。8bit,1byte

    2、GBK:中文,16bit,2byte,兼容ASCII

    3、unicode:万国码,32bit,4byte,兼容ASCII

    4、utf-8:长度可变的unicode。英文:8bit,1byte。欧洲:16bit,2byte。中文:24bit,3byte。

  python2和python3的区别

    python2: python2中默认使⽤的是ASCII码. 所以不⽀持中⽂.  如果需要在Python2中更改编码. 需要在⽂件的开始编写:# -*- encoding:utf-8 -*
- 或coding=utf-8

    python3:在python3的内存中. 在程序运⾏阶段. 使⽤的是unicode编码. 因为unicode是万国码. 什么内容都可以进⾏显⽰. 那么在数据传输和存储的时候由于unicode比较浪费空间和资源. 需要把 unicode转存成UTF-8或者GBK进⾏存储. 怎么转换呢. 在python中可以把⽂字信息进⾏编码. 编码之后的内容就可以进⾏传输了了. 编码之后的数据是bytes类型的数据.其实啊. 还是原来的 数据只是经过编码之后表现形式发⽣了改变⽽已.

    bytes数据类型:表现形式:1. 英⽂   b'alex'  英⽂的表现形式和字符串没什么两样

                 2. 中⽂  b'\xe4\xb8\xad' 这是⼀个汉字的UTF-8的bytes表现形式

二、encode: 编码  ( encode()编码之后的内容是bytes类型的数据)

s = "alex"
print(s.encode("utf-8")) #将字符串改为UTF-8
print(s.encode("GBK"))  #将字符串改为GBK
#结果:b'alex'b'alex's = "中"
print(s.encode("utf-8")) #将字符串改为UTF-8
print(s.encode("GBK"))  #将字符串改为GBK
#结果:b'\xe4\xb8\xad'b'\xd6\xd0'     #记住: 英⽂编码之后的结果和源字符串一致.  中⽂编码之后的结果根据编码的不同. 编码结果 也不同. 我们能看到.  ⼀个中⽂的UTF-8编码是3个字节. ⼀一个GBK的中⽂文编码是2个字节. 编码之后的类型就是bytes类型.  在⽹络传输和存储的时候我们python是保存和存储的bytes类型. 那么在对⽅方接收的时候. 也是接收的bytes类型的数据. 我们可以使用decode()来进⾏解码操作. 把bytes类型的数据还原回我们熟悉的字符串:

三、decode:解码:

s = "我是张无忌"
print(s.encode("utf-8"))  #编码
结果:b'\xe6\x88\x91\xe6\x98\xaf\xe5\xbc\xa0\xe6\x97\xa0\xe5\xbf\x8c's1 = b'\xe6\x88\x91\xe6\x98\xaf\xe5\xbc\xa0\xe6\x97\xa0\xe5\xbf\x8c'
print(s1.decode("utf-8"))  #解码
结果:我是张无忌

四、编码和解码的时候都需要制定编码格式.

s = "我喜欢碧瑶"
bs = s.encode("GBK")  #获取到GBK文字
#把GBK转换成UT-8,首先把GBK转换成unicode.也就是需要解码
print(bs)
ss = bs.decode("GBK") #解码
print(ss)
#从新编译成utf-8
bss = s.encode("utf-8") #从新编码
print(bss)

转载于:https://www.cnblogs.com/LW-5208/articles/9283342.html

is与==的恩怨、编码的详解相关推荐

  1. python编码问题无法复现_Python编码问题详解

    1. 基本概念 字符集(Character set) 解释:文字和符合的总称 常见字符集: Unicode字符集 ASCII字符集(Unicode子集) GB2312字符集 编码方法(Encoding ...

  2. php各种编码集详解和在什么情况下进行使用 [php 字符集 显示]

    http://blog.cnsunrun.com/member/blog/blog_info/30/84 ----------------------------------------------- ...

  3. java web编码详解_java web 开发 编码问题详解

    java web 开发 编码问题详解 浏览器 IE/FireFox ------------->Servlet容器-------------------------->显示页面 编码   ...

  4. 01_什么是one-hot编码、one-hot编码过程详解、为什么需要one-hot编码?one-hot编码的优缺点、使用sklearn中的API举例

    以下资料来自:网络+最后的整合 https://www.cnblogs.com/shuaishuaidefeizhu/p/11269257.html https://www.cntofu.com/bo ...

  5. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解

    JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应用中.网上的分析文章和解决方案都很多,但总是针对某些特定情况的.很多次遇到乱码问题后,经过极为辛苦的调试和搜索资 ...

  6. (best!)JAVA中文字符编码问题详解

    转载自:http://blog.csdn.net/youyue/article/details/4580402 JAVA中文字符编码问题详解 JAVA的中文字符乱码问题一直很让人头疼.特别是在WEB应 ...

  7. 基于C语言的JPEG编码代码详解

    一.基于C语言的JPEG编码代码详解 #include <stdio.h> #include <stdlib.h> #include <string.h>#prag ...

  8. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  9. xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程)

    xss编码绕过详解(更像是在介绍实体编码和JS编码的解析过程) 注:本文通过研究各种情况下实体编码和JS编码是否生效,进而总结了哪些情况下能够进行编码后,javascript代码依然能够正常执行. 解 ...

  10. URL编码/解码详解

    URL编码/解码详解 当 URL 路径或者查询参数中,带有中文或者特殊字符的时候,就需要对 URL 进行编码(采用十六进制编码格式).URL 编码的原则是使用安全字符去表示那些不安全的字符. 安全字符 ...

最新文章

  1. 引人遐想,用 Python 获取你想要的 “某个人” 摄像头照片
  2. Freebsd10.3(FreeBSD11 Beta1)使用手记
  3. DaVinci的Buffer_Handle和BufTab Cmem函数调用
  4. POJ 1236 Network of Schools(强连通分量缩点求根节点和叶子节点的个数)
  5. mysql cache lock_MySQL:query cache lock
  6. vue3中v-model的重大更新
  7. 自学python3 最好的入门书籍-清华学霸整理,Python入门到精通这几本书帮你快速入行...
  8. cannot import name ‘Imputer‘ from ‘sklearn.preprocessing‘
  9. D3D12渲染技术概述
  10. 二分排序(java)
  11. excel android 官网下载地址,excel手机版app下载-excel手机版(excel教程学习)下载v2.0 安卓版-西西软件下载...
  12. GridinSoft CHM编辑器3.2.0多语言,轻松快速地翻译CHM电子书
  13. mysql front 垃圾_MySQL_Front 的缺点
  14. html里 alt属性什么意思,HTML
  15. People Counter - People Counting
  16. spacy包及trained pipelines安装教程
  17. 迪杰斯特拉算法(dijkstra)_朴素版_堆优化版
  18. 旋转矩阵、欧拉角、四元数理论及其转换关系
  19. 数据处理-500行Python代码处理ave/chunk命令下1d和2d分块数据
  20. Kubernetes 企业集群建设规划

热门文章

  1. matlab中二维散点图,MATLAB实例:二维散点图
  2. 支付系统 java_PaySystem
  3. Android .9图
  4. 2022图书出版行业营销白皮书-巨量引擎
  5. 首支完全由 AI 创作的歌曲《未来之歌》发布!对于未来,你方了吗?
  6. lwIP 细节之三:TCP 回调函数是何时调用的
  7. 荣耀 MagicBook Pro 加装固态硬盘
  8. mysql优化 个人笔记 (mysql 主从复制 ) 非礼勿扰 -m11
  9. SATA硬盘电源线或数据线引发的故障
  10. linux 启动流程与文件系统管理