小数据池 is 和 == ,以及再谈编码

一、小数据池

  1.id()

  小数据池针对的是:int ,str,boo(都是不可变的数据类型)

  (1)如果是在py文件中写的字符串,几乎都是缓存的

  (2)在黑窗口里写的机会都不会缓存

  (3)不同的解释器,缓存的机制也不一样

    优点:

       可以帮我们快速的创建对象,节省内存

    缺点:
       缓存如果过大,反应速度会比较慢

  在py文件中几乎所有的字符串都会缓存,id()查看变量的内存地址

s = "alex"
print(id(s))

  

  2. is 和 ==

   ==判断左右两端的值是否相等,不不是一致。

   is判断左右两端内容的内存地址是否一致,如果返回True,哪可以确定这两个变量使用的是同一个对象

 lst1 = [1,2,3]
lst2 = [1,2,3]
# # 列表没有小数据池
print(id(lst1), id(lst2)) #  166167560 166126408
print(lst1 == lst2) # True
print(lst1 is lst2) # False
#
s1 = "我叫周润发"
s2 = "我叫周润发"
print(s1 == s2)
print(s1 is s2) # 小数据池

tu1 = ("周一", "周二")
tu2 = ("周一", "周二")
print(tu1 is tu2) # 地址不相等 False
print(tu1 == tu2) # 内容相等 True

# == 比较的是内容
# is 比较内存地址

二、编码的补充

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

# -*- encoding:utf-8 -*-

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

  编码回顾:

    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: 可变⻓度

   bytes的表现形式:

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

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

 

  编码:

    encode(utf-8/gbk):编码,把字符串转化成utf-8/gbk格式bytes

    decode(utf-8/gbk):解码,把bytes解码成字符串

 

   utf-8和gbk是不能直接转换的, 必须使用unicode来转换

s = "我今天非常的困" # 21个utf-8
bs = s.encode("gbk") # 把字符串转化成utf-8格式bytes
# # bytes不是给人看的. 给机器用的
# # 14个字节   gbk
b'\xce\xd2\xbd\xf1\xcc\xec\xb7\xc7\xb3\xa3\xb5\xc4\xc0\xa7'
# # 21个字节   utf-8
# # b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
print(bs)

  

    把字节转化回字符串

bs = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
s = bs.decode("utf-8")
print(s)

    

    关于bytes, 非ascii中的内容. 展示的时候都是\x.. 如果是ascii中的内容. 原样输出

      

name = "alex昨天吃多了"
bs = name.encode("gbk") # b'alex\xd7\xf2\xcc\xec\xb3\xd4\xb6\xe0\xc1\xcb'
print(bs)

bss = name.encode("utf-8") # b'alex\xe6\x98\xa8\xe5\xa4\xa9\xe5\x90\x83\xe5\xa4\x9a\xe4\xba\x86'
print(bss)

  

    

   

posted @ 2018-12-04 20:06  五仁儿  阅读(174)  评论(0编辑  收藏  举报