支持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 因为执行了代码块,终端中是False a = "@" 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,6 print(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.不让修改原数据的时候,使用 posted on 2019-06-11 19:43 七橼77 阅读( ...) 评论( ...) 编辑 收藏转载于:https://www.cnblogs.com/-777/p/11005589.html
相关资源:JAVA上百实例源码以及开源项目