今日内容
001 小数据池
002 数据类型补充
003 编码的进阶
004 深浅copy
001 小数据池
id() # 获取内存地址
== # 比较==两边对象的值是否相等
is # 身份运算符, 判断is两边对象的内存地址是否相同
代码块
初始化对象 -- 变量赋值
缓存机制 -- 驻留机制
同一代码块驻留机制的目的
节省内存空间
提高性能
同一代码块驻留机制针对的对象
int bool str 空tuple
范围
int 所有
bool True False
str 几乎所有字符串
小数据池
不同代码块之间的缓存机制
小数据池驻留机制针对的对象
int bool str
范围
int -5~256
bool True False
str 一定规则之内的字符串
在同一代码块下, 采用同一代码块缓存机制
在不同代码块下, 采用小数据池缓存机制
002 数据类型的补充
数据类型之间的转换
int() bool() str()
bool可以与所有数据类型进行转换
所有为空的数据类型转换为bool都为False
str与list之间的转换
str --> list str.split()
list --> str "连接符".join(list)
str与tuple之间的转换
str --> tpule partition
tuple --> str "连接符".join(tuple)
list与tpule之间的转换
list <--> tuple list(tuple) tuple(list)
tuple
如果元组中只有单个元素并且没有","则该元组的类型是元素本身的类型
dict
dict.fromkeys() # 返回一个新字典
坑 指定的key必须是一个可迭代对象, 如果指定的value是一个可变的数据类型, 这个值在内存中只占一个位置id(一改俱改)
循环一个列表时不要改变列表的大小, 这样会改变最后的结果
循环一个字典时不能改变字典的大小, 否则会报错
003 编码的进阶
不同的编码之间是不能互相识别的
大背景 Python3.x版本
str在内存中的编码方式 -- Unicode
写入文件的内容, 传输给别人的数据一般都是str的形式
矛盾点 --> 网络传输不能使用Unicode, 但是Python3.x需要str形式操作
解决 --> 利用str传输数据时将Unicode编码转换成非Unicode编码
bytes数据类型
dir(bytes)
获取bytes数据类型所有方法
str与bytes的比较
str
在内存中的编码 Unicode
表现形式 英文 --> "str" 中文 --> "中国"
bytes
在内存中的编码 非Unicode
表现形式 英文 --> b"bytes" 中文 --> b"\xe3\xb8\xad\xe5\x9b\xbd"3
.encode()
编码 将以指定编码转换(编码)成Unicode编码, 若无指定默认指定utf-8
.decode()
解码 将以Unicode编码转换(解码)成指定编码, 若无指定默认指定utf-8
终极转换
utf-8 bytes -X-> gbk bytes 不能直接转换, 需要通过Unicode作为中介
>>>utf-8 = utf-8 bytes.encode("utf-8")
>>>gbk = utf-8.decode("gbk")
004 深浅copy
浅copy
创建一个外壳(列表)复制对象到其中, 外壳(列表)中的对象保持原状
深copy
不仅创建一个外壳, 外壳里面的可变数据类型也创建一份新的, 但是不可变数据类型仍共用