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