小数据池 集合 深浅拷贝
小数据池 集合 深浅拷贝
一、小数据池
-
定义:小数据池是Python中一种提高效率的方式,固定数据类型使用同一个内存地址,支持数据类型:str,int,bool是一种缓存机制,特被称为驻留机制,各大编程语言中都有类似的东西。
-
id() ----- 查看元素的内存地址
-
is 与 == 的区别
- is 判断两个元素的内存地址是否相等
- == 判断等号左右两边的元素的值是否相等
-
小数据池的规则
- 数字:-5~256
- 字符串:
- 字符串在做乘法(乘数不为1)的时候总长度不能超过20
- 自己定义的字符串的长度不受限制,但字符串必须由字母、数字、下划线组成。
- 特殊字符(中文除外)定义1个的时候,进行驻留
-
代码块:一个文件,一个模块,一个函数,一个类,终端中每一行都是一个代码块
-
规则
- 数字:全部驻留
- 字符串:
- 自己定义的字符串全部驻留
- 字符串做乘法(乘数不为1)时总长度不超过20
- Python3.7以上版本乘法的时候总长度不能超过4096
-
二、set集合
-
定义:集合就是一个没有value的字典,无序,去重,可哈希,集合是一个可变数据类型
-
语法:
-
集合的相关操作
s = {1,2,3,4,5}
-
增
s.update(可迭代数据类型) --- 迭代添加 s.add('haven') ----- 单个添加
-
删
# s.pop() ---- 随机删除 # s.remove(3) ---- 指定元素删除 # s.clear() ---- 清空(注:结果为set(),为了与字典区分 # del s ---- 删除整个集合
-
改
只能删了再加
-
查
for循环遍历
-
其他操作
s1 = {1,2,3,4} s2 = {3,4,5,6} print(s1-s2) --- 差集 1,2 print(s1|s2) --- 并集 1,2,3,4,5,6 print(s1&s2) --- 交集 3,4 print(s1^s2) --- 反交集 1,2,5,6 print(s1>s2) --- 判断s1是否为s2的父集 返回布尔值 print(s1<s2) --- 判断s1是否为s2的子集 返回布尔值 s3 = frozenset({1,2,3,4,5,6}) --- 冻结集合,变成不可变数据类型
-
重要用法---集合去重
lis = [1,2,2,3,2,4,5,6,5,6,7] print(list(set(lis))) --- 结果[1, 2, 3, 4, 5, 6, 7] 去重是数组最重要的用法
-
三、深浅拷贝
-
赋值 =
赋值没有创建新的空间,是多个变量指向同一个内存地址
-
浅拷贝
- l2 = l1[:] 和 l2 = l1.copy()
- 只拷贝第一层元素
- 会创建一个新的容器,容器中的元素和原来容器中的元素指向同一个内存地址
-
深拷贝
-
import copy
l2 = copy.deepcopy(l1)
-
不可变的数据类型和原数据指向同一空间
-
可变数据类型会创建一个新的空间
-
-
总结:
-
浅拷贝只为最外层可变数据类型创建新的空间
-
深拷贝会为每一层可变数据类型创建新的空间
-