一,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. Android应用开发基础之一:数据存储和界面展现(一)

    Android项目的目录结构 Activity:应用被打开时显示的界面 src:项目代码 R.java:项目中所有资源文件的资源id Android.jar:Android的jar包,导入此包方可使用 ...

  2. Python3条件控制语句

    Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. if语句 if 条件: 代码块 elif 条件: 代码块 else: 代码块 python中用elif ...

  3. IOS 连接服务器(socket)

    // // ViewController.m // 05.聊天室 // // Created by apple on 14/12/5. // Copyright (c) heima. All righ ...

  4. JVM 虚拟机内存深入探究

    [<深入理解java虚拟机>-整理笔记] by  lijun JVM虚拟机内存逻辑模型: 方法区(全局变量 静态数据 常量等) 线程共享 堆栈区(对象实例 数组数据 new generat ...

  5. python:进程操作

    一.多进程应用 import socket from multiprocessing import Process def talk(conn): conn.send(b'connected') re ...

  6. luogu P1710 地铁涨价

    嘟嘟嘟 一道最短路好题. 首先明确一点,把一条边的边权变成2,等于删去这条边.因为变成2后最短路肯定不会经过这条边,就相当于删去这条边了. 所以题目变成了依次删去Q条边,求每一次删完边后有几个点的最短 ...

  7. redis未授权访问getshell

    redis未授权访问的问题一年前就爆了,当时刚开始学安全,还不太懂.今天借着工作的机会来搞一把,看看能不能拿下一台服务器.其实前几天就写好了一直想找个实际环境复现一下,一直没有找到,只说下大致思路. ...

  8. JavaScript内存管理

    低级语言,比如C,有低级的内存管理基元,想malloc(),free().另一方面,JavaScript的内存基元在变量(对象,字符串等等)创建时分配,然后在他们不再被使用时"自动" ...

  9. Unity 游戏框架搭建 (十三) 无需继承的单例的模板

    之前的文章中介绍的Unity 游戏框架搭建 (二) 单例的模板和Unity 游戏框架搭建 (三) MonoBehaviour单例的模板有一些问题. 存在的问题: 只要继承了单例的模板就无法再继承其他的 ...

  10. [oracle]索引与索引表管理

    (一)索引的概念 索引是一种与表或簇相关的数据库对象,能够为数据的查询提供快捷的存取路径,减少磁盘I/O,提高检索效率. 索引由索引值及记录相应物理地址的ROWID两个部分构成,并按照索引值有序排列, ...