一,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. idea 新建文件夹目录问题解决

    选中工程,设置,去掉选项“Compact Empty Middle Packages” .

  2. Oracle自定义行转列函数

    --行转列自定义函数,只针对TABLE1表 --paramType是参数类型,用于判断,param1和param2是条件参数 create or replace function My_concat( ...

  3. March 25 2017 Week 12 Saturday

    Better master one than engage with ten. 会十事不如精一事. My colleagues think I have known a lot of things, ...

  4. LAB2 软件测试 Selenium上机实验 2017

    1.安装SeleniumIDE插件 打开Firefox——>菜单栏——>附加组件——>获取附加组件——>查看更多附加组件——>搜索框输入SeleniumIDE并查找——& ...

  5. IOS 摇一摇的方法

    ● 监控摇一摇的方法 ● 方法1:通过分析加速计数据来判断是否进行了摇一摇操作(比较复杂) ● 方法2:iOS自带的Shake监控API(非常简单) ● 判断摇一摇的步骤:实现3个摇一摇监听方法 ● ...

  6. c++利用互斥锁实现读写锁

    很简单就是在读的时候把写的锁锁住就好了 class readwrite_lock { public: readwrite_lock() : read_cnt(0) { } void readLock( ...

  7. @Modules( ... ) 多个包路径问题

    如何支持多个包路径,modules不在同一个报名下 @Modules(scanPackage = true, packages = "cn.wizzer.modules, com.xxx.m ...

  8. Python map/reduce/filter/sorted函数以及匿名函数

    1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...

  9. WSASocket()与Socket()的区别 转

    /**************************************************** WSASocket是Windows专用,支持异步操作:socket是unix标准,只能同步操 ...

  10. Angularjs实例应用

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...