python--is/id==,集合,深浅拷贝
## 01 今日内容大纲 1. is == id 用法 2. 代码块 3. 同一代码块下的缓存机制 4. 不同代码块下的缓存机制(小数据池) 5. 总结 6. 集合(了解) 7. 深浅copy ## 03 具体内容 1. id is == ```python # id 身份证号 # i = 100 # s = 'alex' # print(id(i)) # print(id(s)) # == 比较的是两边的值是否相等 # l1 = [1, 2, 3] # l2 = [1, 2, 3] # print(l1 == l2) # s1 = 'alex' # s2 = 'alex ' # print(s1 == s2) # is 判断的是内存地址是否相同 # l1 = [1, 2, 3] # l2 = [1, 2, 3] # print(id(l1)) # print(id(l2)) # print(l1 is l2) s1 = 'alex' s2 = 'alex' print(id(s1)) print(id(s2)) print(s1 is s2) # id 相同,值一定相同 # 值相同,id不一定相同 ``` ![1557120882292](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557120882292.png) ![1557120960898](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557120960898.png) 2. 代码块 + 代码块:我们所有的代码都需要依赖代码块执行。 + 一个文件就是一个代码块。 + 交互式命令下一行就是一个代码块。 3. 两个机制: 同一个代码块下,有一个机制。不同的代码块下,遵循另一个机制。 4. 同一个代码块下的缓存机制。 + 前提条件:同一个代码块内。 + 机制内容:pass + 适用的对象: int bool str + 具体细则:所有的数字,bool,几乎所有的字符串。 + 优点:提升性能,节省内存。 5. 不同代码块下的缓存机制: 小数据池。 - 前提条件:不同代码块内。 - 机制内容:pass - 适用的对象: int bool str - 具体细则:**-5~256数字**,bool,满足规则的字符串。 - 优点:提升性能,节省内存。 ```python # i1 = 1000 # i2 = 1000 # i3 = 1000 # l1 = [1,2,3] # l2 = [1,2,3] # print(id(l1)) # print(id(l2)) # print(id(i1)) # print(id(i2)) # print(id(i3)) i = 800 i1 = 800 s1 = 'hfdjka6757fdslslgaj@!#fkdjlsafjdskl;fjds中国' s2 = 'hfdjka6757fdslslgaj@!#fkdjlsafjdskl;fjds中国' print(i is i1) print(s1 is s2) ``` ![1557121050553](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557121050553.png) ![1557121058450](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557121058450.png) 1. 总结:+ 1. 面试题考。 2. 回答的时候一定要分清楚:同一个代码块下适用一个缓存机制。不同的代码块下适用另一个缓存机制(小数据池) 3. 小数据池:数字的范围是-5~256. 4. 缓存机制的优点:提升性能,节省内存。 2. python基础数据类型之:集合 set。容器型的数据类型,它要求它里面的元素是不可变的数据,但是它本身是可变的数据类型。集合是无序的。{}。 + 集合的作用: + 列表的去重。 + 关系测试: 交集,并集,差集,..... + pass ```python # 集合的创建: # set1 = set({1, 3, 'Barry', False}) # set1 = {1, 3, '太白金星', 4, 'alex', False, '武大'} # print(set1) # 空集合: # print({}, type({})) # 空字典 # set1 = set() # print(set1) # 集合的有效性测试 # set1 = {[1,2,3], 3, {'name': 'alex'}} # print(set1) # set1 = {'太白金星', '景女神', '武大', '三粗', 'alexsb', '吴老师'} # 增: # add # set1.add('xx') # print(set1) # update迭代着增加 # set1.update('fdsafgsd') # print(set1) # 删 # remove # remove 按照元素删除 # set1.remove('alexsb') # # print(set1) # pop 随即删除 # set1.pop() # print(set1) # 变相改值 # set1.remove('太白金星') # set1.add('男神') # print(set1) #关系测试:*** # 交集 # set1 = {1, 2, 3, 4, 5} # set2 = {4, 5, 6, 7, 8} # print(set1 & set2) # 并集: # print(set1 | set2) # 差集 - # print(set1 - set2) # 反交集 # print(set1 ^ set2) # 子集 # set1 = {1,2,3} # set2 = {1,2,3,4,5,6} # # print(set1 < set2) # # # 超集 # print(set2 > set1) # 列表的去重 *** # l1 = [1,'太白', 1, 2, 2, '太白',2, 6, 6, 6, 3, '太白', 4, 5, ] # set1 = set(l1) # l1 = list(set1) # print(l1) # 用处:数据之间的关系,列表去重。 ``` 3. 深浅copy(面试会考) ```python # 赋值运算 # l1 = [1, 2, 3, [22, 33]] # l2 = l1 # l1.append(666) # print(l1) # print(l2) # 浅copy # l1 = [1, 2, 3, [22, 33]] # l2 = l1.copy() # l1.append(666) # print(l1,id(l1)) # print(l2,id(l2)) # l1 = [1, 2, 3, [22, 33]] # l2 = l1.copy() # l1[-1].append(666) # print(id(l1[-1])) # print(id(l2[-1])) # print(id(l1[0])) # print(id(l2[0])) # print(l1) # print(l2) # l1 = [1, 2, 3, [22, 33]] # l2 = l1.copy() # l1[0] = 90 # print(l1) # print(l2) # 深copy # import copy # l1 = [1, 2, 3, [22, 33]] # l2 = copy.deepcopy(l1) # # print(id(l1)) # # print(id(l2)) # l1[-1].append(666) # print(l1) # print(l2) # 相关面试题; # l1 = [1, 2, 3, [22, 33]] # l2 = l1[:] # l1[-1].append(666) # print(l1) # print(l2) # 浅copy: list dict: 嵌套的可变的数据类型是同一个。 # 深copy: list dict: 嵌套的可变的数据类型不是同一个 。 ``` ![1557121101538](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557121101538.png) ![1557121118707](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557121118707.png) ![1557121128548](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557121128548.png) ![1557121141524](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557121141524.png) ![1557121153427](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557121153427.png) ## 04 今日总结 + id is == 三个方法要会用,知道是做什么的。 + 回答的时候一定要分清楚:同一个代码块下适用一个缓存机制。不同的代码块下适用另一个缓存机制(小数据池) + 小数据池:数字的范围是-5~256. + 缓存机制的优点:提升性能,节省内存。 + 集合:列表去重,关系测试。 + 深浅copy:理解浅copy,深浅copy,课上练习题整明白。
1. id == is:
+ == :数值是否相同 is:内存地址,id 获取对象的内存地址
2. 代码块:一个文件,交互式命令一行就是一个代码块。
3. 同一代码块下缓存机制(字符串驻留机制):
+ 所有数字,bool 几乎所有的字符串
+ 优点:提升性能,节省内存空间。
4. 不同代码块的缓存机制(小数据池):在内存中开辟两个空间,一个空间存储-5~256的int,一个空间存储一定规则的字符串,如果你的代码中遇到了满足条件的数据,直接引用提前创建的。
+ -5~256 int,bool,满足一定规则的字符串。
+ 优点:提升性能,节省内存空间。
5. 集合:列表去重,关系测试 交并差。
6. 深浅copy:
+ 浅copy:在内存中开辟一个新的空间存放copy的对象(列表,字典),但是里面的所有元素与被copy对象的里面的元素共用一个。
![1557212618447](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557212618447.png)
![1557212630446](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557212630446.png)
![1557212642798](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557212642798.png)
![1557212657357](C:\Users\oldboy\AppData\Roaming\Typora\typora-user-images\1557212657357.png)