Python学习day006 小数据池与代码块(浅)

今日内容

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 编码的进阶

不同的编码之间是不能互相识别的

网络传输, 数据存储不能使用Unicode编码去编译

大背景 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

不仅创建一个外壳, 外壳里面的可变数据类型也创建一份新的, 但是不可变数据类型仍共用

 

 

猜你喜欢

转载自www.cnblogs.com/dmcs95/p/10507636.html