python2有 xrange(),生成器
id()打印内存地址,is 比较内存地址
对于数字和字符串,小数据时(-5~256) 为了节省内存,同一个数字会使用同一个内存地址
a = 'a'
b = a
print(id(a)) # 2061289328288
print(id(b)) # 2061289328288
print(a is b) # True
编码:
ascii:1个字符 = 1个字节byte = 8位 bit
unicode:1个字符 = 4个字节 = 32位
utf-8:英文字符:1个字符 = 1个字节 = 8位
中文字符:1个字符 = 3个字节 = 24位
gbk:英文字符:1个字符 = 1个字节 = 8位
中文字符:1个字符 = 2个字节 = 16位
各个编码之间二进制不能互相识别,会乱码
文件的储存、传输不能是unicode,因为浪费空间
python3中 str在内存中以unicode存在,因此传输或储存需要进行str转换
bytes类型:非unicode编码,用来传输或者存储
因此unciode的str需要用encode()以utf-8等编码成bytes类型来进行存储或传输
对于英文:
str: 表现形式:s = 'test'
编码方式:01010101 unicode
bytes 表现形式:s = b'test'
编码方式:00000010 utf-8
对于中文:
str 表现形式:s = '中国'
编码方式:01010101 unicode
bytes 表现形式:s = b'\xe4\xb8\xad\xe5\x9b\xbd' 每个\为一个字节,可见utf-8下一个中文3个字节
编码方式:00000101 utf-8
转换:python3中 str类型只有encode()方法,bytes类型只有decode()方法
str.encode('utf-8')
bytes.decode('utf-8')