1.小数据池
# 小数据池 -- 缓存机制(驻留机制)
# == 判断两边内容是否相等
a = 10
b = 10
print(a==b)
# is 是
a = 10
b = 10
print(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 = lst
print(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] = 1
print(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] = 8
print(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 copy
lst1 = copy.deepcopy(lst)
print(id(lst[-1][-1]))
print(id(lst1[-1][-1])) # 内存地址
# 总结
# 浅拷贝的时候只拷贝第一层元素
# 浅拷贝在修改第一次元素(不可变数据类型)的时候,拷贝出来的新列表不进行改变
# 浅拷贝在替换第一层元素(可变数据类型)的时候,拷贝出来的新列表不进行改变
# 浅拷贝在修改第一层元素中的元素(第二层)的时候,拷贝出来的新列表进行改变
# 深拷贝开辟一个容器空间(列表),不可变数据公用,可变数据类型(再次开辟一个新的空间),空间里的值是不可变的数据进行公用时,可变的数据类型再次开辟空间