Day 6 小数据池,深浅拷贝以及集合详解

it2022-05-05  115

小数据池---缓存机制(驻留记住)

== 判断两边内容是否相等

is a = 10 b = 10 print(a is b) is判断基于内存地址

小数据池的数字范围:-5~256

代码块:一个py文件,一个函数,一个类,一个模块,终端中每一行都是一个代码块 支持: 数字:在同一代码块下,只要内容相同就采用相同的内存地址(-6之后,∞) 在做乘法的时候范围 -5~256 ******* 在做乘法的时候不能使用浮点数

字符串 在同一代码块下,只要内容相同就采用相同的内存地址 在乘法的时候总长度不能超过20****** 乘法的时候中文,特殊符号乘1或0

布尔值 在同一代码块下,只要内容相同就采用相同的内存地址

小数据池:-5~256规则 数字-5~256********* 字符串: 在同一代码块下,只要内容相同就采用相同的内存地址 在乘法的时候总长度不能超过20 ********** 乘法的时候,特殊符号乘0 布尔值 在同一代码块下,只要内容相同就采用相同的内存地址

小数据池的验证方法,必须脱离代码块才能执行 先执行代码块的规则,在执行小数据池的规则(驻留机制)

必会 == 判断两边的值是否相等****** is 判断两边的内存地址是否相等****

深浅拷贝 复制 面试必问,赋值,浅拷贝,深拷贝

浅拷贝 lst = [1,2,3,[5,6,7]] lst1 = lst print(lst) print(lst1)#地址一样

import copy lst = [1,2,3,[5,6,[1,2,3]]] lst1 = lst.copy() lst[-1].remove(5) lst1[-1].append(1) lst[-1][0] = 10 print(lst) print(lst1) 浅拷贝,只拷贝第一层 增删第一层的时候,修改一个,另一个不变 增删第二层的时候,修改一个,另一个变 增删第N层的时候, 修改一个,另一个变 修改第一层的时候,修改一个,另一个不变 修改第二层的时候,修改一个,另一个变 修改第N层的时候, 修改一个,另一个变 深拷贝 import copy lst = [1,2,3,[5,6,[1,2,3]]] lst1 = copy.deepcopy(lst) lst[-1][-1].remove(1) lst[-1][-1].append(10) lst1[-1][-1][0] = 10 print(lst) print(lst1) 深拷贝,不可变元素公用,可变元素新开辟一个, 可变元素里面的值公用。 增删第一层的时候,修改一个,另一个不变 增删第二层的时候,修改一个,另一个不变 增删第N层的时候, 修改一个,另一个不变 修改第一层的时候,修改一个,另一个不变 修改第二层的时候,修改一个,另一个不变 修改第N层的时候, 修改一个,另一个不变

总结: 浅拷贝的时候只拷贝第一层元素 浅拷贝在修改第一层元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变 浅拷贝在替换第一层元素(可变数据类型)的时候,拷贝出来的新列表不进行改变 浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变

深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据数据类型(再次开辟一个新的空间) ,空间里的值是不可变的数据进行共用的,可变的数据类型再次开辟空间

集合 -- set 没有值得字典 无序 -- 不支持索引 天然去重 *****

定义集合 s = {1,"alex",False,(1,2,3),12,1,12,4,6,32,2,4} print(s)

面试题: lst = [1,2,1,2,4,2,45,3,2,45,2345,] print(list(set(lst)))

s = {1,2,3,4}

增:

s.add('1') #只能添加一个(字符串,数字,元组) print(s) s.update("今天") # 迭代添加 print(s)

删: print(s.pop()) # pop有返回值 print(s) s.remove(3) # 指定元素删除 print(s) s.clear() # 清空 -- set() 空集合 print(s)

改: 先删在加

查: for i in {1,2,3}: print(i)

其他操作: 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)

今日总结 1.小数据池: 1.1代码块: 一个文件,一个函数,一个类,一个模块,终端中每一行 1.1.1 数字: -5 ~ 256 1.1.2 字符串: 乘法时总长度不能超过20 1.1.3 布尔值: 内容相同内存地址相同 1.2 小数据池: 1.2.1 数字: -5 ~ 256 1.2.2 字符串: 乘法时总长度不能超过20 1.2.3 布尔值: 内容相同内存地址相同 1.3 先执行代码块后执行小数据池 1.4 == is 1.4.1 == 判断等号两边值是否相等 1.4.2 is 判断两边的值内存地址是否相等

2.深浅拷贝 2.1 赋值: 多个变量名指向同一个内存地址 一个变量对其进行操作,其他变量查看时都变动 2.2 浅拷贝: lst[1:10] -- 是浅拷贝 浅拷贝只拷贝第一层元素 修改第一层元素的时候,新开辟的不进行改变 2.3 深拷贝: 不可变的数据类型共用,可变的数据类型重新开辟一个空间 对源数据进行修改,深拷贝的内容不进行改变

集合 3.1 集合是没用值得字典 3.2 集合是无序,可变的 3.3 集合天然去重 3.4 增:add ,update 删:pop remove clear 改:先删后加 查: for循环 3.5 其他操作: & 交集 | 并集 - 差集 ^ 反交集 > 超集 < 子集 frozenset() 冻结集合 3.6 面试题: list(set(要去去重的数据))

转载于:https://www.cnblogs.com/zhuzhizheng/p/11178915.html


最新回复(0)