小数据池 集合 深浅拷贝
Posted douzi-m
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小数据池 集合 深浅拷贝相关的知识,希望对你有一定的参考价值。
小数据池 集合 深浅拷贝
一、小数据池
定义:小数据池是Python中一种提高效率的方式,固定数据类型使用同一个内存地址,支持数据类型:str,int,bool是一种缓存机制,特被称为驻留机制,各大编程语言中都有类似的东西。
id() ----- 查看元素的内存地址
is 与 == 的区别
- is 判断两个元素的内存地址是否相等
- == 判断等号左右两边的元素的值是否相等
小数据池的规则
- 数字:-5~256
- 字符串:
- 字符串在做乘法(乘数不为1)的时候总长度不能超过20
- 自己定义的字符串的长度不受限制,但字符串必须由字母、数字、下划线组成。
- 特殊字符(中文除外)定义1个的时候,进行驻留
代码块:一个文件,一个模块,一个函数,一个类,终端中每一行都是一个代码块
规则
- 数字:全部驻留
- 字符串:
- 自己定义的字符串全部驻留
- 字符串做乘法(乘数不为1)时总长度不超过20
- Python3.7以上版本乘法的时候总长度不能超过4096
二、set集合
定义:集合就是一个没有value的字典,无序,去重,可哈希,集合是一个可变数据类型
语法:1,2,3,4,5
集合的相关操作
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)
不可变的数据类型和原数据指向同一空间
可变数据类型会创建一个新的空间
总结:
浅拷贝只为最外层可变数据类型创建新的空间
深拷贝会为每一层可变数据类型创建新的空间
以上是关于小数据池 集合 深浅拷贝的主要内容,如果未能解决你的问题,请参考以下文章