Python_006(is和==,小数据池)

一.is和==的区别

1.id()方法,可以查看一个变量的内存地址

 

 1 lst = ["周杰伦", "燃哥"]
 2 lst1 = ["周杰伦", "燃哥"]
 3 print(id(lst))
 4 print(id(lst1))
 5 #输出结果:2016969304136
 6          2016999144008 
 7 #可以看出地址不一致
 8 
 9 s = "燃哥"
10 s1 = "燃哥"
11 # 小数据池. 会对字符串进行缓存, 为了节省内存
12 print(id(s))
13 print(id(s1))
14 #输出结果:2666201022288
15          2666201022288    
16 #地址是一致的

总结:

  1)python中是有一个小数据池的,如果你单纯的定义一个字符串,那么一般情况下都是会被添加到小数据池中

  python会帮我们把字符串进行缓存,在下次使用的时候直接指向这个字符串即可,可以节省很多空间,

  2)小数据池也可对数字进行缓存,但也是有范围的-5~256是会被加的,超出则不加;

  3)对于字符串:a:是纯字母和下划线.那么这个对象会被添加到小数据池,中文也是特殊字符,字符串中带有中文是不会被添加的

    b:带有特殊字符的. 那么不会被添加到小数据池. 每次都是新的;例如:s1='@alxt'和s2='@alxt'地址不一样

    c:如果是单一字母*n的情况.'a'*20,在20个单位内是可以的.超过20个单位就不会添加到小数据池中

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

3.总结:is比较的是内存地址

   ==比较的是值

二.编码的补充

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

1 -*- encoding:utf-8 -*

2.在python3中:内存中使用的是unicode码

3.1 ASCII:最早的编码,没有中文,8个二进制位,一个字节;

3.2 GBK:中文国标码,里面包含ASCII编码和中文常用编码,16个二进制位(bit),2个字节;

3.3 Unicode:万国码,包含了全世界所有国家的文字的编码,32个二进制位,4个字节;

3.4 UTF-8:可变长度的万国码,是unicode的一种实现,英文:8位,1字节; 欧洲文字:16位,2字节; 中国文字:24位,3字节;

bytes的表现形式:英文:b"alex" 英文的表现形式和字符串没什么两样; 中文:b'\xe4\xb8\xad一个字的utf-8表现形式; 

 

1 s = "alex"
2 bs = s.encode("GBK")
3 cs= s.encode("utf-8")
4 print(bs)
5 print(cs)
6 #输出结果:b'alex'
7                 b'alex'    

 

GBK => utf-8:

1 bs = b'\xb6\xf6\xc1\xcb\xc3\xb4'
2 # 先解码成unicode字符串
3 s = bs.decode("GBK")
4 print(s)
5 # 在把字符串编码成UTF-8
6 bss = s.encode("utf-8")
7 print(bss)
8 #输出结果:饿了么
9                 b'\xe9\xa5\xbf\xe4\xba\x86\xe4\xb9\x88'

 

 

 

 

 

 

posted @ 2018-07-10 14:44  pythonZhou  阅读(174)  评论(0编辑  收藏  举报