day06
1.小数据池
# 小数据池 -- 缓存机制(驻留机制)# == 判断两边内容是否相等a = 10b = 10print(a==b)# is 是a = 10b = 10print(a is b) # True is 判断基于内存地址进行判断# 小数据池的数字范围: -5 ~ 256# 代码块:一个文件,一个函数,一个类,一个模块,终端中每一个行是一个代码块# 支持:# 数字: # 在同一代码块下 只要内容相同就采用相同的内存地址(-5~正无穷) # 数字在做乘法的时候范围-5~256 **** # 数字在做乘法的时候不能使用浮点数# 字符串: # 在同一代码块下 只要内容相同就采用相同的内存地址 # 乘法的时候总长度不能超过20 **** # 乘法的时候中文,特殊符号乘以1或0# 布尔值: # 在同一代码块下 只要内容相同就采用相同的内存地址# 小数据池# 数字: -5~256# 字符串: # 在同一代码块下 只要内容相同就采用相同的内存地址 # 乘法的时候总长度不饿能超过20 **** # 乘法的时候中文,特殊符号乘以0# 布尔值 # 在同一代码块下 只要内容相同就采用相同的内存地址 # 小数据池的验证方法,必须脱离代码块才能验证 # 先执行代码块的规则,再执行小数据的规则 --(驻留机制) # 必会: # == 判断等号两边的值是否相等 # is 判断两边的内存地址是否相等
2.深浅拷贝
# 深浅拷贝 复制# 面试必问,赋值,浅拷贝,深拷贝# 赋值lst = [1,2,3,4,5,[6,7,8]]lst1 = lstprint(lst1)print(lst)lst1[-1].append(8)print(lst1) # 输出 [1,2,3,4,5,[6,7,8,9]]print(lst) # 输出[1,2,3,4,5,[6,7,8,9]]# 浅拷贝# 浅拷贝的时候,只会开辟一个新的容器列表,其他元素使用的都是列表中的元素lst = [1,2,3,4,5,[6,7,8]]lst1 = lst.copy()lst1[-1].append(9)print(lst) print(lst1) # 两个都变 [1,2,3,4,5,[6,7,8,9]]lst = [1,2,3,4,5,[6,7,8]]lst1 = lst.copy()lst[-1] = 1print(lst) # [1,2,3,4,5,1]print(lst1) # [1,2,3,4,5,[6,7,8]]lst = [1,2,3,4,5[6,7,8,[9,10]]]lst1 = lst.copy()lst1.append(11)print(lst) # 变 print(lst1) # 不变lst = [[1,2],90,6,7,[5,6]]lst1 = lst.copy()lst1[-1] = 8print(lst) # 不变print(lst1) # 变dic = {"alex":[1,2,3,[5,6]]}dic1 = dic.copy()dic["alex"][0] = "57"print(dic) # 变print(dic1) # 变 字典的值就相当于二级列表# 深拷贝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,4,[5,16,7,[8, 10, 9]]]import copylst1 = copy.deepcopy(lst)print(id(lst[-1][-1]))print(id(lst1[-1][-1])) # 内存地址# 总结# 浅拷贝的时候只拷贝第一层元素# 浅拷贝在修改第一次元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变# 浅拷贝在替换第一层元素(可变数据类型)的时候,拷贝出来的新列表不进行改变# 浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变# 深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行公用时,可变的数据类型再次开辟空间