☞1、id 查询内存地址
name = 'alex'
print(id(name))
li = [1,2,3]
print(id(li))
☞2、is 判断的是内存地址
☞== 是比较值,is 是内存地址是否相同
name1 = 'alex@'
name2 = 'alex@'
print(name1 == name2)---Ture
print(name1 is name2)-----Ture
☞3、小数据池
Python中 int 与 str 存在小数据池,其他类型没有
int 范围 -5 —256—指向一个内存地址
str 如果是全部由字母组成的字符串 都是指向一个内存地址.
如果是数字与str(单个字母)想乘,则20以内(包含20)的是同一个内存地址.
其他数据类型 则没有小数据池概念.
☞4、编码进阶
☞4.1 编码回顾
unicode :万国码
A : 0000 0001 0000 0001 0000 0001 0000 0001 32位
中: 0000 0101 0000 0001 0000 0001 0000 0001 32位
升级:utf-8 :用最少8位表示一个字符
A : 0000 0001 8位
欧洲 : 0000 0001 0000 0001 16位
亚洲 中 : 0000 0101 0000 0001 0000 0001 24位
gbk :国标
a : 0000 0001 8位
中 : 0000 0101 0000 0001 16位
不同编码之间是不能互相识别对方的二进制,会报错,或者产生乱码.
在你的字符串(文件),存储,传输时,必须使用非unicode的二进制(01010101).
py3:
字符串:编码方式(在内存中的运行方式):默认都是unicode.
☞4.2 byte 表现形式
byte
对于非中文: 表现形式: b’alex’
内部编码: utf-8 gbk,gb2312…(非unicode) 你设定的.
对于中文: 表现形式: b’xe3\xf2\x36\xe3\xf2\x36’
内部编码: utf-8 gbk,gb2312…(非unicode) 你设定的.
str
对于非中文: 表现形式: ‘alex’
内部编码: unicode
对于中文: 表现形式: ‘中国’
内部编码: unicode
str >>> byte
b = s.encode(‘utf-8’)
s = 'alex'
b = s.encode('utf-8')
b1 = s.encode('gbk')
print(s,type(s))-----alex
print(b,type(b))-----b'alex'
print(b1,type(b1))--b'alex'
s = '中国'
b = s.encode('utf-8')
b1 = s.encode('gbk')
print(s,type(s))
print(b,type(b))------b'\xe4\xb8\xad\xe5\x9b\xbd'
print(b1,type(b1))----b'\xd6\xd0\xb9\xfa'