一 常量池(小数据池)
二 解码和编码
三 基础数据补充
四 set集合
五 深浅拷贝
一 常量池(小数据池)
⼩数据池: ⼀种数据缓存机制.也被称为驻留机制.各⼤编程语⾔中都有类似的东⻄.在⽹上搜索常量池,⼩数据池指的都是同⼀个内容.
⼩数据池只针对: 整数,字符串,布尔值.其他的数据类型不存在驻留机制
在python中对-5到256之间的整数会被驻留在内存中. 将⼀定规则的字符串缓存. 在使⽤的时候, 内存中只会创建⼀个该数据的对象. 保存在⼩数据池中. 当使⽤的时候直接从⼩数据池中获取对象的内存引⽤. ⽽不需要创建⼀个新的数据. 这样会节省更多的内存区域.
优点: 能够提⾼⼀些字符串, 整数的处理速度. 省略的创建对象的过程.
缺点: 在'池'中创建或者插入新的内容会花费更多的时间.
对于数字: -5~256是会被加到⼩数据池中的. 每次使⽤都是同⼀个对象.
对于字符串:
1. 如果字符串的⻓度是0或者1, 都会默认进⾏缓存
2. 字符串⻓度⼤于1, 但是字符串中只包含字⺟, 数字, 下划线时才会缓存
3. ⽤乘法的到的字符串.
①. 乘数为1, 仅包含数字, 字⺟, 下划线时会被缓存. 如果包含其他字符, ⽽⻓度<=1 也会被驻存,
②. 乘数⼤于1 . 仅包含数字, 字⺟, 下划线这个时候会被缓存. 但字符串⻓度不能⼤于20
4. 指定驻留. 我们可以通过sys模块中的intern()函数来指定要驻留的内容.
PS:在代码块内的缓存机制是不⼀样的. 查是否其值是否已经存在, 如果存在, 会将其重⽤. 换句话说: 执⾏同⼀个代码块时, 遇到初始化对象的命令时,他会将初始化的这个变量与值存储在⼀个字典中, 在遇到新的变量时, 会先在字典中查询记录, 如果有同样的记录那么它会重复使⽤这个字典中的之前的这个值.
二 解码和编码
在Python3的内存中,在程序运行阶段,使用的是Unicode编码,因为Unicode是万国码.什么内容都可以显示.但在数据传输和存储的时候由于Unicode比较浪费空间和资源,需要把Unicode转化成UTF-8来进行储存.
把文字转化成bytes形式叫编码:encode
把bytes转化成Unicode/UTF-8/GBK等形式叫解码:decode
三 基础数据补充
join() 把列表中的数据进行拼接。 拼接成字符串
删除列表常见问题:由于删除元素会导致元素的索引改变, 所以容易出现问题. 尽量不要再循环中直接去删除元素. 可以把要删除的元素添加到另⼀个集合中然后再批量删除.
dict.fromkeys(iter, value) 把可迭代对象进行迭代。 和后面的value组合成键值对 返回新字典
PS:返回新字典。不会改变原来的字典
字典中的所有的value都是同一个列表(指向同一内存地址)
四 set集合
set中的元素是不重复的.⽆序的.⾥⾯的元素必须是可hash的(int, str, tuple,bool), 可以这样来记. set就是dict类型的数据但是不保存value, 只保存key. set也⽤{}表⽰
创建:a = set()
添加set.add() set.update()
删除set.pop(), set.remove() set.clear()
不支持修改
查询 for循环打印查看
冻结 frozenset{} 冻结后不可修改
五 深浅拷贝
浅拷贝:只拷贝第一层内容,若第一层内容包含列表等嵌套内容,修改嵌套内容会导致同步修改
深拷贝:把对象内容全部拷贝,修改无影响. 需import copy a = copy.deepcopy(拷贝对象)
作用:快速创建对象