编码问题
一.Python2
默认为ascii码,使用时需要使用
# -*- encoding:utf-8 -*-
二.Python3
默认为utf-8
编码方式 | 解释 |
---|---|
unicode | 一个字节表示所有英文、特殊字符、数字等,用四个字节表示中文(过于浪费资源) |
utf-8 | unicode升级版,用三个字节表示一个中文字 |
gbk | 中国国内使用,一个中文字两个字节 |
tips:不同编码方式之间不能解析彼此的二进制码
- 字符串编码
内存中str型默认使用unicode,不能用于储存和传输使用(占用过多空间,仅在转码时借用),需要转码成bytes类型(使用utf-8等格式编码),可用于传输和储存。
1.英文表示
s = 'alex'
print(s, type(s))
s1 = b'alex'
print(s1, type(s1))
alex <class 'str'> # unicode编码
b'alex' <class 'bytes'> # utf-8...编码
2.中文表示
s = '程序员'
print(s, type(s))
s1 = '程序员'.encode('utf-8') # 默认为utf-8
print(s1, type(s1))
程序员 <class 'str'> # unicode编码
b'\xe7\xa8\x8b\xe5\xba\x8f\xe5\x91\x98' <class 'bytes'> # 16进制表示,一个中文字3个字节
tips: python3中用encode,通过类型转换来进行编码转换
内存问题
int型和str型的变量在一定范围内会存储在同一个小数据池中,以此来减少内存消耗。
id():返回内存地址,等同于c++的指针
s1 = 2
s2 = 257
print(id(s1), id(s2))
1905683232 2468906249936