1.默认编码不同 p2 ASCII p3 utf-8
2.p2 print("") print "" p3只能print("")
3.p2 有 xrange() (可以转换为range) (也有range )
4.p2 raw_input() p3 input()
= 赋值
== 比较值是否相等
is 比较内存地址
为了节省空间 节省内存(请在终端进行)
id(内容) 这样就能打印id也就是内存地址
list dict tuple set没有小数据池
1 li1 = [1,2,3] 2 li2 = li1 3 print(li2 is li1) #True 4 print(id(li1),id(li2)) #相等 5 6 #数字和字符串 小数据池 7 #数据范围 -5-----256 8 9 li1 = 6 10 li2 = 6 11 print(id(li1), id(li2)) #一样的 共用 12 print(li1 is li2) #True 13 14 li1 = 1000 15 li2 = 1000 16 print(id(li1), id(li2)) #不一样的 不共用 17 print(li1 is li2) #False 18 19 #字符串 1.不能含有特殊字符(比如@ 空格 + - * /) 20 # 2.s*20 还是同一个地址 s*21以后都是两个地址 (存疑 不一定) 21 s1 = 'dasdasdas@sdah' 22 s2 = 'dasdasdas@sdah' 23 print(s1 is s2) #True 24 25 s1 = 'dasdasdassdah' 26 s2 = 'dasdasdassdah' 27 print(s1 is s2) #False 28 29 s1 = 'jfdbhegihdslnkldshfgidjsgbpolsdihyfpou'*20 30 s2 = 'jfdbhegihdslnkldshfgidjsgbpolsdihyfpou'*20 31 print(s1 is s2) #True 32 33 34 s1 = 'jfdbhegihdslnkldshfgidjsgbpolsdihyfpou'*1024 35 s2 = 'jfdbhegihdslnkldshfgidjsgbpolsdihyfpou'*1024 36 print(s1 is s2) #FalseView Code
ascii(1个字节8位)
unicode (开始是16位(之后就不用了) 现在是32位 4个字节)
utf-8 (英文字母 8位 一个字节)
中文 24个字节
gbk (英文 8位一个字节)
中文 16位两个字节
gbk 不能识别 utf-8
1.各个编码之间的二进制 是不能互相识别的 会产生乱码
2.文件储存,传输不能是unicode(因为花太多存储空间)
py3: str 在内存中是用unicode编码 数据绝对不能直接用
bytes类型 可以直接用str的方法 不是用unicode编码,而是utf-8或gkb等
unicode要转化为utf-8来用
对英文
str : 表现形式: s = 'alex'
内部存储 编码方式:unicode 01010101
bytes: 表现形式: s = b'alex'
编码方式:utf-8 gbk等 00100001
s = 'alex' s1 = b'alex' print(s,type(s)) #str print(s1,type(s1)) #bytes
对中文
str : 表现形式: s = '中文'
内部存储 编码方式: 01010101 unicode
bytes: 表现形式: s = b'x\e91\e91\e01\e21\e31\e32' utf-8(完全看不懂)
编码方式 00100001 utf-8 gbk等
将unicode 转换为utf-8或gbk
encode()编码
s = '中文' print(s,type(s)) s1 = b'中文' #ERROR #SyntaxError: bytes can only contain ASCII literal characters. print(s1,type(s1))
s1 = 'alex' #s11 = s1.encode('utf-8') #s11 = s1.encode() s11 = s1.encode('gbk') print(s11)