Python_006

一.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 #地址是一致的

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

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

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'

 

猜你喜欢

转载自www.cnblogs.com/0627zhou/p/9284852.html
006