一:id 查询内存地址
name = ‘alex‘ print(id(name)) li = [1,2,3] print(id(li))
二:is 判断的是内存地址
name1 = ‘[email protected]‘ name2 = ‘[email protected]‘ print(name1 == name2) print(name1 is name2)
三:小数据池
小数据池主要是针对数字,字符串两种类型而言的,对于数字而言,其范围在-5--256之间,对于字符串而言,如果其全部由字母组成,都是指向一个内存地址。如果是数字与str(单个字母)想乘,则20以内(包含20)的是同一个内存地址,其他数据类型 则没有小数据池概念。
四:编码知识进阶
1,不同编码之间是不能互相识别对方的二进制,会报错,或者产生乱码.
2,在你的字符串(文件),存储,传输时,必须使用非unicode的二进制(01010101).
3,py3:字符串:编码方式(在内存中的运行方式):默认都是unicode.
4,字符串和字节的关系
byte 对于非中文: 表现形式: b‘alex‘ 内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.
对于中文: 表现形式: b‘xe3\xf2\x36\xe3\xf2\x36\‘ 内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.
str 对于非中文: 表现形式: ‘alex‘ 内部编码: unicode
对于中文: 表现形式: ‘中国‘ 内部编码: unicode
5,str和byte的转化
1,当字符串为英文时,程序如下:
s = ‘alex‘ b = s.encode(‘utf-8‘) b1 = s.encode(‘gbk‘) print(s,type(s)) print(b,type(b)) print(b1,type(b1))
2,当字符串为中文时,程序如下:
s = ‘中国‘ b = s.encode(‘utf-8‘) b1 = s.encode(‘gbk‘) print(s,type(s)) print(b,type(b)) print(b1,type(b1))