6 小数据池和编码

一.小数据池
1. id()查看变量的内存地址
is 判断内存地址是否相同
==判断 数据类型的值是否相等
2.小数据池的作用:
为了快速的创建字符串对象,减少内存空间浪费
用缓存的前提:数据可以共享,不可变
小数据池. 一种数据缓存机制. 也被称为驻留机制

3.代码块:python程序是由代码块构成的. 一个代码块的文本作为python程序执行的单元.
代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块.
一个文件也是一个代码块, eval()和exec()执行的时候也是⼀个代码块
4.小数据池只针对: 整数, 字符串, 布尔值. 其他的数据类型不存在驻留机制

5.对于数字: -5~256是会被加到小数据池中的. 每次使用都是同⼀个对象.

6.对于字符串:
1. 如果字符串的长度是0或者1, 都会默认进行缓存
2. 字符串长度大于1, 但是字符串中只包含字母, 数字, 下划线时才会缓存
3. 用乘法的到的字符串. ①. 乘数为1, 仅包含数字, 字母, 下划线时会被缓存. 如果
包含其他字符, 而长度<=1 也会被驻存, ②. 乘数大于1 . 仅包含数字, 字母, 下划
线这个时候会被缓存. 但字符串长度不能大于20
4. 指定驻留. 我们可以通过sys模块中的intern()函数来指定要驻留的内容.

二.编码
1. ASCII 1个bytes 8位
2. gbk 2个bytes 16位
3. unicode 4个bytes 32位
4. utf-8
英文 1个bytes
欧洲 2个bytes
中文 3个bytes

1.python3中使用的是unicode, python2里面使用的ascii
2.uincode 适合进行计算,unicode 不适合存储. utf-8适合存储和传输
3.需要对字符串进行编码,编码成适合传输的utf-8或者GBK
1.encode("gbk") encode("utf-8")
2.编码之后是字节以 b'开头,方便传输,
3.英文在编码的时候还是英文本身
4.编码: 存储和传输。 encode()
5.解码: 接受数据的时候。decode()
6.bytes是python中的最小数据单元
4.例子:

GBK的bytes类型 bs
(1)
bs = b'\xc2\xed\xbb\xaf\xcc\xda'
1. 解码成unicode(str)
s = bs.decode("gbk")
2. 编码成utf-8
bss = s.encode("utf-8")
print(bss) # b'\xe9\xa9\xac\xe5\x8c\x96\xe8\x85\xbe'
(2)
s = "我是文字"
bs = s.encode("GBK") # 我们这样可以获取到GBK的文字
# 把GBK转换成UTF-8
# 首先要把GBK转换成unicode. 也就是需要解码
s = bs.decode("GBK") # 解码
# 然后需要进行重新编码成UTF-8
bss = s.encode("UTF-8") # 重新编码
print(bss)
posted @ 2018-10-24 19:20  冰底熊  阅读(190)  评论(0编辑  收藏  举报