1. 小数据池, id()
小数据池针对的是: int, str, bool 在py文件中几乎所有的字符串都会缓存. id() 查看变量的内存地址# id()函数可以帮我们查看一个变量的内存地址# a = 10# b = 30# print(id(a)) # 1515545088# print(id(b)) # 1515545728# lst = ['周杰伦', "麻花藤"]# print(id(lst)) # 166167624# print(lst)# lst = [] # 创建了一个新列表# lst.append("胡辣汤")# print(id(lst)) # 166167624# print(lst)# lst1 = [1,2,3] # 两个对象 内存地址是不一样的# lst2 = [1,2,3]# print(id(lst1)) # 166167624# print(id(lst2)) # 166122376# s1 = "abc" # 内存中是没有"abc", 创建一个新的 0.0001# s2 = "abc" # 内存中是已经有了"abc", 直接把abc拿来用 0.0000001# print(id(s1), id(s2)) # 31096032 31096032# 视频频率最高的数据类型: 字符串,为了能够快速的创建字符串.# 节省内存. 把相同的规律的字符串进行缓存,当下次创建的时候就不在创建了# 把字符串的缓存-> 小数据池 -> String iterning -> 常量池 -> 字符串缓存# 在创建字符串之前. 先去小数据池对比. 是否已经存在了该字符串.如果存在了.# 就不创建新的了. 直接拿原来存在的数据, 省略掉反复重复创建字符串的过程. 节约内存# 什么数据会被缓存# 数字, 字符串, 布尔值 => 都是不可变的数据类型# 1. 数字# a = 1000# b = 1000# print(id(a), id(b)) # 165830000 165830000# 2. 字符串. 如果单纯的写字符串. 几乎都会被缓存# s1 = "alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事"# s2 = "alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事"## print(id(s1), id(s2)) # 31222064 31222064# 如果在py文件中写的字符串. 几乎都是缓存的# 在黑窗口里的写的几乎都不会缓存# 不同的解释器. 缓存的机制也不一样# 优点: 可以帮我们快速的创建对象.节省内存.# 缺点: 缓存如果过大. 响应速度会比较慢# 不要纠结.# == 和 is 区别:# == 比较的是数据, 外贸# is 比较的是内存地址, 比较身份证号# lst1 = [1,2,3]# lst2 = [1,2,3]# # 列表没有小数据池# print(id(lst1), id(lst2)) # 166167560 166126408# print(lst1 == lst2) # True# print(lst1 is lst2) # False## s1 = "我叫周润发"# s2 = "我叫周润发"# print(s1 == s2)# print(s1 is s2) # 小数据池# tu1 = ("周一", "周二")# tu2 = ("周一", "周二")# print(tu1 is tu2) # 地址不相等 False# print(tu1 == tu2) # 内容相等 True# == 比较的是内容# is 比较内存地址