一,is和==的区别:

 1, 通过一个ID()可以查看到一个变量表示的值在内存中的地址.    s = 'alex'

    print(id(s))   # 4326667072
s = "alex"
print(id(s)) #
lst = [1, 2, 4]
print(id(lst)) #
lst1 = [1, 2, 4]
print(id(lst1)) # 4326684360
  #我们发现. 字符串的数据地址是一样的. 而列表的数据地址是不一样的.
tup = (1, 2)
tup1 = (1, 2)
print(id(tup))
print(id(tup1))

  小数据池(常量池): 把我们使用过的值存储在小数据池中.供其他的变量使用.

  小数据池给数字和字符串使用, 其他数据类型不存在

  官方关于ID的说法:

  Return the “identity” of an object. This is an integer which is guaranteed to be unique and constant for this object during its lifetime.

  Two objects with non-overlappinglifetimes may have the same id() value.

  CPython implementation detail: CPython implementation detail: This is the address of the object in memory.

  注意. is比较的就是id()计算出来的结果. 由于id是帮我 们查看某数据(对象) 的内存地址. 那么is比较的就是数据(对象)的内存地址.

    最终我们通过is可以查看两个变量使用的是否是同一个对象.

2,  == 双等表示的是判断是否相等, 注意. 这个双等比较的是具体的值.而不是内存地址.

    s1 = "哈哈"
s2 = "哈哈"
print(s1 == s2) # True
print(s1 is s2) # True 原因是有小数据池的存在 导致两个
#变量指向的是同一个对象
l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(l1 == l2) # True, 值是一样的
print(l1 is l2) # False, 值是假的

  总结:

   is 比较的是地址

   == 比较的是值

二,编码的补充:

  1,python2中默认使用的是ASCII码,所以不支持中文,如果需要在Python2中更改编码,需要在文件的开始编写:

        # -*- encoding:utf-8 -*

  2, python3中内存使用的是Unicode码.

3, 编码回顾:

  1> ASCII : 最早的编码. 里面有英文大写字母, 小写字母, 数字, 一些特殊字符. 没有中文, 8个01代码, 8个bit, 1个byte.

  2>GBK: 中文国标码, 里面包含了了ASCII编码和中文常用编码. 16个bit, 2个byte

3>UNICODE: 万国码, 里面包含了全世界所有国家文字的编码. 32个bit, 4个byte, 包含了 ASCII

    4> UTF-8: 可变长度的万国码. 是unicode的一种实现.  最小字符占8位

1.英文: 8bit  1byte

2.欧洲文字:16bit 2byte

3.中文:24bit 3byte

  综上:除了ASCII码外,其他信息不能直接转换.

  4. 在python3的内存中. 在程序运行阶段. 使用的是unicode编码. 因为unicode是万国码. 什么内容都可以进行显示. 那么在数据传输和存储的时候由于

  unicode比较浪费空间和资源. 需要把unicode转存成UTF-8或者GBK进行存储. 怎么转换呢. 在python中可以把文字信息进行编码.编码之后的内容就可以进行传输了.

  编码之后的数据是bytes类型的数据其实还是原来的数据只是经过编码之后表现形式发生了改变而已.

  5. bytes的表现形式:

    1. 英文 b'alex' 英文的表现形式和字符串没什么两样

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

  6.字符串在传输时转化成bytes=> encode(字符集)来完成

    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'

  7.英文编码之后的结果和源字符串一致. 中文编码之后的结果根据编码的不同. 编码结果也不同. 我们能看到一个中文的UTF-8编码是3个字节. 一个GBK的中文编码是2个字节.   编码之后的类型就是bytes类型. 在网络传输和存储的时候我们python是保存和存储的bytes类型. 那么在对方接收的时候. 也是接收的bytes类型的数据.

  我们可以使用decode()来进行解 码操作. 把bytes类型的数据还原回我们熟悉的字符串:

  s = "我叫李嘉诚"
  print(s.encode("utf-8")) # b'\xe6\x88\x91\xe5\x8f\xab\xe6\x9d\x8e\xe5\x98\x89\xe8\xaf\x9a'
print(b'\xe6\x88\x91\xe5\x8f\xab\xe6\x9d\x8e\xe5\x98\x89\xe8\xaf\x9a'.decod e("utf-8")) # 解码

  8,编码和解码的时候都需要制定编码格式.

    s = "我是文字"
bs = s.encode("GBK") # 我们这样可以获取到GBK的文字
# 把GBK转换成UTF-8
# 首先要把GBK转换成unicode. 也就是需要解码
s = bs.decode("GBK") # 解码
# 然后需要进行重新编码成UTF-8
bss = s.encode("UTF-8") # 重新编码
print(bss)

is和==,编码补充的更多相关文章

  1. python 全栈开发,Day7(元组转换,列表以及字典的坑,集合,关系测试,深浅copy,编码补充)

    一.元组转换 数字 tu = (1) tu1 = (1,) print(tu,type(tu)) print(tu1,type(tu1)) 执行输出: 1 <class 'int'>(1, ...

  2. python 基础篇 16 递归和二分数查找与编码补充回顾

    编码回顾补充: 回顾编码问题:        编码相当于密码本,关系到二进制与看懂的文字的的对应关系.    最早期的密码本:        ascii码:只包含英文字母,数字,特殊字符.       ...

  3. python基础编程: 编码补充、文件操作、集合、函数参数、函数递归、二分查找、匿名函数与高阶函数

    目录: 编码的补充 文件操作 集合 函数的参数 函数的递归 匿名函数与高阶函数 二分查找示例 一.编码的补充: 在python程序中,首行一般为:#-*- coding:utf-8 -*-,就是告诉p ...

  4. Python字符编码补充

    字符编码: Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的. 这次是要彻底解决Python字符编码的问题!!! 1 字符编码的发展过程: 1 .AS ...

  5. 编码补充 daty 6

    ---恢复内容开始--- 1.  用id求内存地址 id 查询内存地址 name = 'alex' print(id(name)) li = [1,2,3] print(id(li)) 结果: 2. ...

  6. python之数据类型补充、集合、深浅copy

    一.内容回顾 代码块: 一个函数,一个模块,一个类,一个文件,交互模式下,每一行就是一个代码块. is == id id()查询对象的内存地址 == 比较的是两边的数值. is 比较的是两边的内存地址 ...

  7. CABAC总结与补充讨论

    在之前的一篇文章CABAC中我们已经对算法中的大部分细节部分做了详细分析,这里做一个总结与拾遗. 总结 CABAC的编码可以分为以下四个部分: 上下文变量的初始化 待编码语法元素二值化 上下文建模(确 ...

  8. Python编程-编码、文件处理、函数

    一.字符编码补充知识点 1.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就打开了启动了一个进程,是在内存中的,所以在编辑器编写的内容也都是存放与内存中的,断电后 ...

  9. 小数据池 is和== 再谈编码

    昨日回顾 上节课内容回顾 1. 字典 {key:value, key:value.....} 成对的保存数据 字典没有索引. 不能切片, 字典的key必须是可哈希的.不可变的 1. 增加: dic[新 ...

随机推荐

  1. Swing入门学习

    工作以来,一直都是基于java web方向的开发,并没有java方向GUI相关的开发经验,不过好在之前用过winform开发.有了基础的套路,想来搞一下Swing也没有什么压力!到网上搜了一下相关的学 ...

  2. Appium的DesiredCapabilities参数设置

    Appium的DesiredCapabilities参数设置 DesiredCapabilities 负责启动服务端时的参数设置.实际使用时根据自己的需要,可自行修改一些参数. 比如,应用程序在查找某 ...

  3. 开发时复制aspx网页的方法

    简单的copy /paste    *.aspx网页,所使用的是同一个CodeBehind  ,这往往不是我们所想要的!!!我们一般都希望使这两个网页具有各自的  *.cs文件.步骤:①新建一个Web ...

  4. 时间序列算法理论及python实现(2-python实现)

    如果你在寻找时间序列是什么?如何实现时间序列?那么请看这篇博客,将以通俗易懂的语言,全面的阐述时间序列及其python实现. 时间序列算法理论详见我的另一篇博客:时间序列算法理论及python实现 - ...

  5. Java程序员面试题集2

    51.类ExampleA 继承Exception,类ExampleB 继承ExampleA. 有如下代码片断: try{ throw new ExampleB("b") }catc ...

  6. Perl Unicode全攻略

    Perl Unicode全攻略 耐心看完本文,相信你今后在unicode处理上不会再有什么问题. 本文内容适用于perl 5.8及其以上版本. perl internal form 在Perl看来, ...

  7. QT学习之窗口右键菜单

    #QT学习之窗口右键菜单 QWidget 及其子类都有右键菜单,主要因为其有两个与右键菜单相关联的函数: Qt::ContextMenuPolicy contextMenuPlicy() const ...

  8. python:常用模块一

    一.collections模块 1,在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.defaultd ...

  9. Maven plugin 插件

    1.maven-surefire-plugin简介: Maven在构件时执行到测试的生命周期时,会使用maven-surefire-plugin运行测试用例,背后执行的Junit或者TestNG的测试 ...

  10. 【luogu P2146 [NOI2015]软件包管理器】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2146 变量名真毒瘤 我真的再也不把l,left,r,right弄反了 反向思维更好做一些 #include ...