集合以及深浅拷贝和和小数据池--个人一些经验总结
Posted sjf981012-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合以及深浅拷贝和和小数据池--个人一些经验总结相关的知识,希望对你有一定的参考价值。
小数据池 --缓存机制
==哦按段两边你的内容是否相等
a=10
b=10
print(a==b)
is 是
a=10
b=10
print(a is b) is 判断机遇内存地址就行判断
print(id (a))
print(id(b))
小数据池的数字范围:-5~256
代码块:一个py文件 一各函数 一个类 一个模块,终端中每一行都是一个代码块
支持三种数据类型
数字:在同一个代码块下,只要内容相同就采用相同的内存地址(-5以后就不是)
数字在做乘法的时候范围-5~256 1252 在 130 2 不行
数字在使用乘法的时候不能使用浮点数(-2.5*2)
字符串
在同意代码块下,只要内容相同就采用相同的内存地址
乘法的时候总长度不能超过20
乘法的时候中文,特殊符号成以1或0
布尔值
内容相同采用统一内存地址
小数据池
数字 -5~256
字符串
在统一代码块下,只要内容相容就采用相同的内存地址
乘法的时候总长度不能超过20
乘法的时候中文特殊符号乘以0
布尔值
小数据池的验证发放,必须脱离代码块才能进行验证
cmd终端查看
执行顺序
先执行代码块的规则,再进行小数据池的规则--驻留机制
必会
==判断等号两边的值是否相等
is 判断两边的内存地址是否相等
深浅拷贝
面试必问
- 赋值,浅拷贝,深拷贝
- 赋值
lst=[1,2,3,4,[5,6]]
lst1=lst
print(lst1)
print(lst)
print(id(lst1))
print(id(lst))
浅拷贝 ,浅拷贝的时候只会开辟一个新的容器列表其他元素使用的都是源列表中的元素.
lst=[1,2,3,[4,5,6]]
lst1=lst.copy
s.append(7)
print(lst)
print(lst1)
结果
[1,2,3,[4,5,6],7]
[1,2,3,[4,5,6]]
2.
s[-1].append(7)
print(lst)
print(lst1)
结果
[1,2,3,[4,5,6,7]]
[1,2,3,[4,5,6,7]]
#总结
#浅拷贝的时候只拷贝第一层元素
#浅拷贝在修改第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
#浅拷贝在替换第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
#浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行修改
深拷贝
import copy #导入
lst=[1,2,3,[4,5,6,]]
lst1=copy.deepcopy(lst) #深拷贝
lst[-1].append(7)
print(lst)
print(lst1)
#结果
[1, 2, 3, [4, 5, 6, 7]]
[1, 2, 3, [4, 5, 6]]
2
lst.append(7)
print(lst)
print(lst1)
#结果
[1, 2, 3, [4, 5, 6], 7]
[1, 2, 3, [4, 5, 6]]
#深拷贝:深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行公用的,可变的数据类型再次开辟空间
深浅拷贝
- 赋值:
多个变量名指向同一个内存地址,一个变量对其进行操作,其他变量查看时都变动
- 浅拷贝:
lst[1:10]-- 是浅拷贝,浅拷贝只拷贝第一层元素,修改第一层元素是,新开辟的不进行改变
- 深拷贝:
不可变的数据类型共用,可变数据类型重新开辟一个空间,对源数据进行修改,深拷贝的内容不进行改变
可变类型新拷贝的变
不可变的新拷贝不变
集合--set
集合#没有值的字典 无需--不支持索引
天然去重 去重复
- 定义集合
s=1,"song",Flase,(1,2,3),12,1,12
print(s)
##面试题
s=[1,2,3,1,33,56,3,4]
print(list(set(s)))
一行代码去重复 先转成集合去重再变成列表
s=1,2,3,4
增
- s.add("66") #只添加一下
print(s)
1,2,3,4,"66"
- s.update("今天") # 迭代添加
print(s)
1,2,3,4,"今","天"
删
print(s.pop()) #pop有返回值
print(s)
s.remove(3) #指定元素删除
s.clear() #清空--set() 空集合
改
先删在加
s.renmove(3)
s,add(2)
print(s)
查
for i in 1,2,3:
print(i)
其他操作
s1=1,2,3,4,5,6
s2=2,3,4
print(s1 & s2) # 交集
print(s1 | s2) #并集
print(s1 -s2) #差集
print(s1^s2) #反交集
print(s1>s2) #父集(超集)
print(s1<s2) #子集
print(frozenset(s1) #冻结集合
dic=frozenset(s1):1
print(dic)
难免纰漏 欢迎交流
以上是关于集合以及深浅拷贝和和小数据池--个人一些经验总结的主要内容,如果未能解决你的问题,请参考以下文章