数据池,集合及深浅拷贝
小数据池(python中一种提高效率的方式,固定数据类型使用同一个内存地址)
支持str,int,bool
id 查看空间的内存地址 获取开辟空间的一种地址 print(id(a))
代码块: 一个文件,一个模块,一个函数,一个类,终端中每一行都是一个代码块
在python中是用字典的方式存储
is # 判断两个内存地址是否相同 # 必须记住
== # 判断等号两边的值是否相同 # 必须记住字符串:1.字符串在做乘法的时候总长度不能超过20,进行驻留 # 记住
2.自己定义的字符串 长度不限制 字符串必须(字母,数字.下划线)组成,进行驻留
3.特殊字符(中文除外)定义1个时候,进行驻留
4.字符串*1 其实就是赋值如果is判断相同 == 一定相同
如果==判断相同 is 不一定相同a = 1000 b = 1000 print(a == b)a = "alexdsb" * 2 b = "alexdsb" * 2 print(a is b)a ="12345678912345678qwertyuioqwertUIOWERTYUIOQghjksdfghjk____asdgadsfasdfgasdgasdgfsdaf" b ="12345678912345678qwertyuioqwertUIOWERTYUIOQghjksdfghjk____asdgadsfasdfgasdgasdgfsdaf" print(a is b)a = "你" b = "你" print(a is b) # pycharm中是True 因为执行了代码块,终端中是Falsea = "@" b = "@" print(a is b)a = "你好" b = a * 1 print(a is b) 先执行代码块,不符合代码块才会执行小数据
代码块的规则:
数字: 全部驻留
字符串:
1.字符做乘法的时候总长度不能超过20
2.自定定义的都驻留
3.乘数为1的时候 就是赋值
4.python3.7 乘法的时候总长度不能超过4096总结:
小数池 -- 支持: str,int,bool
小数据池数字: -5 ~ 256
小数据池字符串: 乘法时长度不能超过20怎么能自己驻留?
需要使用python的内置模块 from sys import intern a = intern("@@@@@@"*20) b = intern("@@@@@@"*20) print(a is b) # 自己进行驻留
小数据在哪用?
1.面试的时候偶尔会用到
2.解决自己的疑惑
集合( 集合就是一个没有值的字典,遵循:唯一,无序,元素要求可哈希(不可变)------------------------set {1,2,3}
s = {1,2,3,"123",False,(1,2,3,4)}
集合是无序的
集合是可变的
集合的增删改
增:
s.update("3456") # 迭代添加 print(s)s.add("怼怼") print(s)
删:
s = {1,2,3,"123",False,(1,2,3,4)} print(s) s.pop() #随机删除 s.remove(3) # 通过元素删除 s.clear() # 清空 del s #删除整个集合 print(s)
改:删了再加
查:
for
天然去重 -- 唯一
其他操作:
s1 = {1,2,3,4,5,6,7} s2 = {3,4,5,6print(s1 - s2) #差集 print(s1 | s2) #并集 (合集) print(s1 & s2) #交集 print(s1 ^ s2) #对称差集 -- 反交集 print(s1 > s2) # 超集 -- 父集 print(s1 < s2) # 子集
冻结集合(可变 转换成 不可变) -- 更不常用:
f_s = frozenset({1,2,3,4,5}) dic = {f_s:"1"} print(dic)
集合在哪里用
去重
li = [1,2,3,4,5,2,2,2,33,3,3,2,2,1,]
print(list(set(li)))]面试题:
li = [1,2,3,4,2,1,3] #一行代码去重
print(list(set(li)))
深浅拷贝(拷贝 -- copy 复制了一份)
l1 = [1,2,3,4,[5,6,7,]] l2 = l1 # 赋值 赋值不是拷贝 l1.append(8) print(l1) print(l2)
- 浅拷贝
l1 = [1,2,3,4,[4,5,6]] l2 = l1[:] # 浅拷贝 l2 = l1.copy() # 浅拷贝 -- 只拷贝第一层 print(id(l1[0])) print(id(l2[0])) 浅拷贝会创建一个新的列表(容器), 新创建的列表中的元素和原列表的元素用的是同一个内存空间 l1 = [1,2,3,4] l2 = l1.copy() print(l1) print(id(l1)) print(id(l2)) print(id(l1[0])) print(id(l2[0]))li = [1,2,32,[3,4,5]] l2 = li.copy() li.append(8) print(l2) print(li)li[-1].append(8) print(l2)l1 = [1,2,3,(1,2,3)] l2 = l1.copy() l2[-1] = 6 print(l1) # 不变 print(l2) # 不变l1 = [1,2,3,4,[5,6,7,]] l2 = l1.copy() l1[-1].append(8) print(l2) #[1,2,3,4,[5,6,7,8]]li = [1,2,3,4,] l2 = li # 赋值 两个变量指向了一个列表内存地址 li.append(9) print(l2)l1 = [1,2,3,4,5,] l2 = l1.copy() l1.append(8) print(l2) print(l1)l1 = [1,2,3,[4,5,6]] l2 = l1.copy() l2[-1] = 77 print(l1) print(l2)
深拷贝:import copy
深拷贝:import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) print(li) print(id(li)) print(id(li[-1])) print(l2) print(id(l2)) print(id(l2[-1]))深拷贝 -- 不可变的数据类型和原列表指向同一个空间 可变数据会创建一个新的空间import copy li = [1,2,3,4,5,[6,7,8]] l2 = copy.deepcopy(li) li[-1].append(678) print(l2)import copy li = [3,4,5,[1,2,3,4],6,7,8,{"k":'v'}] l2 = copy.deepcopy(li) li[-1]['k'] = "a" print(li) print(l2)
怎么用,在哪用:
dic = {} # "v":4 li = [] #[{"v":0},{"v":1},{"v":2},{"v":3},{"v":4}] for i in range(0,5): dic["v"] = i li.append(dic) print(li)
- 1.面试
2.不让修改原数据的时候,使用
转载于:https://www.cnblogs.com/-777/p/11005589.html
数据池,集合及深浅拷贝相关推荐
- 集合(set) 深浅拷贝
set集合 , 深浅拷⻉以及部分知识点补充 ⼀. 基础数据类型补充 1. join() 加入 split的逆反 把列表转化为字符串 ,也可以遍历字符串 不能是整型 用于转换类型 join 是遍历(迭代 ...
- Python之基础数据补充、set集合和深浅拷贝
基础数据补充 字符串的常用操作 1. join() li = ["李嘉诚", "麻花藤", "⻩海峰", "刘嘉玲 ...
- 集合、深浅拷贝、文件操作(读、写、追加)函数初识(参数)
小数据池 #int ==比较数值 is 比较内存地址 id 测试内存地址 #str 不能含有特俗字符 单个元素*数字,不能超过21 i1 = 'a'*20 i = 'a'*20 id一样 i1 = ' ...
- 相识python 之小数据池 集合
⼀一. ⼩小数据池 在说⼩小数据池之前. 我们先看⼀一个概念念. 什什么是代码块: 根据提示我们从官⽅方⽂文档找到了了这样的说法: A Python program is constructed fr ...
- set集合、深浅拷贝以及部分知识点补充
基础数据类型补充 字符串的拼接 lis = ["李嘉诚", "麻花藤", "黄海峰", "刘嘉玲"]s = " ...
- 基本数据类型补充、set集合、深浅拷贝
基本数据类型的补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作 str.join(可迭代对象): li = ['李嘉诚','何炅','海峰','刘嘉玲' ...
- python之set集合、深浅拷贝
一.基本数据类型补充 1,关于int和str在之前的学习中已经介绍了80%以上了,现在再补充一个字符串的基本操作: li = ['李嘉诚','何炅','海峰','刘嘉玲']s = "_&qu ...
- set集合和深浅拷贝
set集合 特点: 无序, 不重复, 元素必须可哈希(不可变) 作用: 去重复 本身是可变的数据类型. 有增删改查操作. frozenset()冻结的集合. 不可变的. 可哈希的三. 深浅拷贝 1. ...
- python里clear和copy_python (集合和深浅拷贝)
一. 知识点补充 1. 列表和字典不能在循环过程中进行增删操作,因为列表索引在循环过程会发生改变,字典规定循环不可改变. 删除方法: 将需要大量删除的列表或者字典遍历取出要删除的对象,放入一个空列表, ...
最新文章
- SAP Distribution Model初探
- 美国银行将 AI 应用于企业应收账款处理;联合国或将利用机器学习技术帮助救灾工作...
- maven进行junit测试时报错(二)
- python 内存分析工具_[转] python运行时内存分析工具meliae
- 关闭进程_当手机快没电时,别再结束进程关闭手机了,不仅没用还更耗电
- 计算机网络课程设计(一)--- VLAN划分和动静态基础配置及其思考
- 软测面试丨关于JMeter的面试问题,看这篇就够了!
- Flash版Logo语言9.83
- SQL数据库置疑恢复
- 【愚公系列】2022年04月 微信小程序-image图片
- 微信小程序豆瓣电影学习知识总结
- 使用CA签发的服务器证书搭建Tomcat双向SSL认证服务
- 合同生效需要哪些要件
- 【R language】 清楚区分输出函数 cat、print、paste 区别 经验分享
- Mendix敏捷开发零基础学习《三》-高级 (数据删除保护机制、数据关联删除、Security安全、调用外部接口、调用JAVA代码)
- python计算ks值 代码_python画KS图,求KS值
- C语言:围圈报数游戏
- 什么是共模信号_为什么要抑制共模信号
- ASM 函数参数处理
- 深度学习词汇 Developing Our Own Deep Learning Toolset