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 比较内存地址