Python基础六 内存(id)编码进阶
一.内存(id)
1.查询内存地址(id)
name = 'alex' print(id(name)) li = [1,2,3] print(id(li)) 每次输出的结果都是不同的
2.判断是否是同一内存地址(is)
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> name1 = 'alex@' >>> name2 = 'alex@' >>> print(name1 == name2) True >>> print(name1 is name2) False >>>
二.小数据池 int str
int -5 ---256
str 如果是全部由字母组成的字符串 都是指向一个内存地址.
如果是数字与str(单个字母)想乘,则20以内(包含20)的是同一个内存地址.
其他数据类型 则没有小数据池概念.
三.编码进阶
1.Unicode:万国码(32位)
2.utf—8:用最少8位表示一个字符
3.gbk:国标
1,不同编码之间是不能互相识别对方的二进制,会报错,或者产生乱码.
2,在你的字符串(文件),存储,传输时,必须使用非unicode的二进制(01010101).
py3中:
字符串:编码方式(在内存中的运行方式):默认都是unicode.
int
byte
对于非中文: 表现形式: b'alex'
内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.
对于中文: 表现形式: b'xe3\xf2\x36\xe3\xf2\x36\'
内部编码: utf-8 gbk,gb2312...(非unicode) 你设定的.
s = 'alex' s1 = b'alex' print(s.capitalize()) #输出结果:Alex print(s1.capitalize()) #输出结果:b'Alex' str ---> bytes 英文: s = 'alex' b = s.encode('utf-8') b1 = s.encode('gbk') print(s,type(s)) #输出结果:alex <class 'str'> print(b,type(b)) #输出结果:b'alex' <class 'bytes'> print(b1,type(b1)) #输出结果:b'alex' <class 'bytes'> 中文: s = '中国' b = s.encode('utf-8') b1 = s.encode('gbk') print(s,type(s)) #输出结果:中国 <class 'str'> print(b,type(b)) #输出结果:b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'> print(b1,type(b1)) #输出结果:b'\xd6\xd0\xb9\xfa' <class 'bytes'>
str
对于非中文: 表现形式: 'alex'
内部编码: unicode
对于中文: 表现形式: '中国'
内部编码: unicode
bool
list
tuple
dict