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