如果在py 文件中写的字符串,几乎都是缓存的,在cmd中写的几乎都不会缓存。
a = 257b= 257
print(id(a)) #1707735307344
print(id(b)) #1707735307344
print(a is b) #True
两个对象 内存地址是不一样的
lst1 = [1,2,3] #两个对象 内存地址是不一样的
lst2 = [1,2,3]print(id(lst1)) #2748225600840
print(id(lst2)) #2748225627144
在创建字符串之前,会先去小数池比对,是否已经存在了该字符串,如果存在了,就不再创建新的了,直接拿原来存在的数据,省略掉反复重复创建字符串的过程,节约内存。
3、编码的补充
1、回顾编码
ASCII:最早的编码,里边有英文大写字母,英文小写字母,数字,一些特殊字符,没有中文, 8bit,一个byte
GBK:包含ASCII,中文(主要),日文,韩文,繁体文字。16bit ,2byte
unicode:万国码,包含ASCII,gbk,big5. ...32bit, 4byte
UTF-8:可变长度的unicode
1、英文: 8bit ,1 byte
2、欧洲文字:16bit , 2byte
3、中文: 24bit , 3byte
不同的编码间不能随意转化,需要通过媒介(unicode)转化。
在python3中,默认的编码是unicode,我们的字符串就是unicode
在python2 中,默认的编码是ASCII,Cpython,c语言的默认编码是ASCII
unicode的弊端:在存储和传数数据的时候不能直接使用unicode,必须要对字符串进行编码,编码成ASCII类型。
bytes:字节形式的字符串,不是给人看的,是给机器用的。非ASCII中的内容,展示的时候都是 \x..如果是ASCII中的内容,原样输出。
1、encode(编码格式) 编码
2、decode(编码格式) 解码
UTF-8 和GBK是不能直接转化的,必须使用unicode来转化。
m = '今天晚上想看什么书!'a= m.encode('gbk')print(a)
b= m.encode('utf-8')print(b)#b'\xbd\xf1\xcc\xec\xcd\xed\xc9\xcf\xcf\xeb\xbf\xb4\xca\xb2\xc3\xb4\xca\xe9\xa3\xa1'#b'\xe4\xbb\x8a\xe5\xa4\xa9\xe6\x99\x9a\xe4\xb8\x8a\xe6\x83\xb3\xe7\x9c\x8b\xe4\xbb\x80\xe4\xb9\x88\xe4\xb9\xa6\xef\xbc\x81'