day06_步入百万年薪的第六天
day06
小数据池
小数据池——缓存机制(驻留机制),只是一种规格,不会实际的开辟一个空间
- == 判断两边内容是否相等 *****
# 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*****
- 字符串:在同一代码块下,只要内容相同就采用相同的内存地址
乘法的时候总长度不能超过20*****
乘法的时候中文,特殊符号乘以0
- 布尔值:在同一代码块下,只要内容相同就采用相同的内存地址
小数据池的验证方法,必须脱离代码块才能进行验证
先执行代码块的规则,当代码块的规则不符合的时候再执行小数据池的规则(驻留机制)
# a = -2.5 * 2 # b = -2.5 * 2 # print(id(a)) # print(id(b)) # print(a is b) # true # a = "alex你好" *2 # b = "alex你好" *2 # print(id(a)) # print(id(b)) # print(a is b) # true
代码块
一个文件,一个函数,一个类,一个模块,终端中每一行是一个代码块
支持的数据类型:数字,字符串,布尔值
- 数字:在同一个代码块下,只要内容相同就采用相同的内存地址(比-5小的就不是)
数字在做乘法的时候范围: -5——256,不能使用浮点数 *****
- 字符串:在同一代码块下,只要内容相同就采用相同的内存地址
乘法的时候总长度不能超过20 *****
乘法的时候中文,特殊符号乘以1或0
- 布尔值:在同一代码块下,只要内容相同就采用相同的内存地址
深浅拷贝
面试必问:赋值,浅拷贝,深拷贝
赋值:
# lst = [1,2,3,[5,6,7]] # lst1 = lst # print(lst1) # print(lst) # lst[-1].append(8) # print(lst1) # print(lst)
浅拷贝
拷贝:复制
浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是源列表中的元素
浅拷贝的时候只拷贝第一层元素
规则:
修改原列表里面的整体元素只有原列表改变,如果修改原列表里面的整体元素里面的元素,则两个都改变
修改新列表里面的整体元素只有新列表改变,如果修改新列表里面的整体元素里面的元素,则两个都改变
如果只是修改原列表或者新列表的整体元素,则改变的那个列表改变,另外一个不改变
# lst1 = lst.copy() # 新开辟一个空间给lst1 # # print(lst[-1]) # print(lst1[-1]) # # print(id(lst1[-1])) # print(id(lst[-1])) # 浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是源列表中的元素 # lst = [1,2,3,[5,6,7]] # lst1 = lst.copy() # lst1[-1].append(8) # print(lst) # print(lst1) # lst = [1,2,3,[5,6,7]] # lst1 = lst.copy() # lst[3] = 567 # print(lst1) # print(lst) # lst = [1,2,3,4,[5,6,7,[8,9]]] # lst1 = lst.copy() # [1,2,3,4,[5,6,7,[8,9]],10] # lst1.append(10) # print(lst) # print(lst1) # lst = [1,2,3,4,[5,6,7,[8,9]]] # lst1 = lst.copy() # lst1[-1][-1] = "56" # print(lst) # [1,2,3,4,[5,6,7,[8,9]]] # print(lst1) # ["56",2,3,4,[5,6,7,[8,9]]] # lst = [[1,2,],90,6,7,[5,6]] # lst1 = lst.copy() # lst1[-1] = 8 # print(lst) # print(lst1) # dic = {"alex":[1,2,3,[5,6]]} # dic1 = dic.copy() # dic["alex"][0] = "56" # print(dic) # print(dic1)
深拷贝
需要导入:import copy
深拷贝开辟一个容器空间(列表),不可变数据类型公用,可变数据类型(再次开辟一个新的空间),空间里的值是不可变的值进行共用的,可变的数据类型再次开辟空间
# import copy #导入 # lst = [1,2,3,[5,6,7]] # lst1 = copy.deepcopy(lst) # 深拷贝 # lst[-1].append(8) # print(lst) # print(lst1) # lst = [1,2,3,[5,6,7,[8,10,9]]] # import copy # lst1 = copy.deepcopy(lst) # print(id(lst[-1][-1])) # print(id(lst1[-1][-1]))
集合
集合 ——set 无序的——不支持索引
没有值的字典,天然去重
类似字典的键,可变类型不能放:列表、字典、集合不能放
# 定义集合 # s = {1,"alex",false,(1,2,3),12,1,12,4,6,32,2,4} # print(s)
增
- add() :只能添加一个
- update() :迭代添加
# s = {1,2,3,4} # s.add("67") #只能添加一个 # print(s) # s.update("今天") # 迭代添加 # print(s)
删
- pop() :随机删除,有返回值
- remove(值) :指定删除
- clear() :清空 ——set() 空集合
# s = {1,2,3,4} # print(s.pop()) # pop有返回值 # print(s) # s.remove(3) # 指定元素删除 # print(s) # s.clear() # 清空 -- set() 空集合 # print(s)
改
先删除再添加
查
for循环
# for i in {1,2,3}: # print(i)
打印的时候是无序的,循环的是有序的
其他操作
交集:&
并集: |
差集: -
反交集:^
父集(超集): >
子集 : <099
frozenset() : 冻结集合
# s1 = {1,2,3,4,5,6,7} # s2 = {5,6,7,1} # 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)
面试题:
# 面试题: # lst = [1,2,1,2,4,2,45,3,2,45,2345,] # print(list(set(lst)))
上一篇: 详解Angular依赖注入
下一篇: AngularJS 中括号的作用详解
推荐阅读
-
day21_步入百万年薪的第二十一天——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版
-
年薪百万的大数据开发工程师的入门书单(收藏)
-
什么专业可以年薪百万?附大学最容易年薪百万的专业排名
-
普通程序员如何变身年薪百万的机器学习工程师?(文末送书)
-
day21_步入百万年薪的第二十一天——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版
-
弃百万年薪,他只为做最好的机器人!
-
年薪百万的前端工程师是如何理解JavaScript的
-
百万年薪的人才泡沫与人工智能的虚假繁荣
-
年薪百万的大数据开发工程师的入门书单(收藏)
-
day12_步入百万年薪的第十二天——生成器、推导式、简单内置函数