06 day小数据池
程序员文章站
2022-06-05 16:38:53
1.小数据池,id() 小数据池针对的是: int ,str,bool 都是不可变的数据类型 a.int 类型 a = 1000 b = 1000 print(id(a), id(b)) # 165830000 165830000 b. 字符串,如果单纯的鞋字符串,几乎都会被缓存 a = 1000 ......
1.小数据池,id()
小数据池针对的是: int ,str,bool-----都是不可变的数据类型
a.int 类型
a = 1000
b = 1000
print(id(a), id(b)) # 165830000 165830000
s1 = "alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事"
# s2 = "alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事alex昨天上厕所没关门. 韩红冲进去了. 面筋歌出来了. 有故事"
#
print(id(s1), id(s2)) # 31222064 31222064
在py文件中几乎所有的字符串都会缓存,在cmd黑窗口里的几乎都不会缓存,不同的解释器,缓存的机制也不一样
优点:可以帮我们快速的创建对象. 节省内存
缺点: 缓存如果过大.响应速度会比较慢
id()函数可以帮我们查看一个变量的内存地址
a = 10
b = 30
print(id(a)) # 1515545088
print(id(b)) # 1515545728
两个对象值一样,但是对应的内存地址是不一样的
1 = [1,2,3] # 两个对象 内存地址是不一样的
lst2 = [1,2,3]
print(id(lst1)) # 166167624
print(id(lst2)) # 166122376
2.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
3.再谈编码
encode(编码格式) 编码
decode(编码格式) 解码
s = "我今天非常的困" # 21个utf-8
bs = s.encode("gbk") # 把字符串转化成utf-8格式bytes
# bytes不是给人看的. 给机器用的
# 14个字节 gbk
b'\xce\xd2\xbd\xf1\xcc\xec\xb7\xc7\xb3\xa3\xb5\xc4\xc0\xa7'
# 21个字节 utf-8
b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
print(bs)
utf - 8和 gbk是不能直接转换的,必须使用unicode来转换
bs = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
# 把字节转化回字符串
s = bs.decode("utf-8")
print(s)
b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
把这个bytes转化成gbk的bytes
bs = b'\xe6\x88\x91\xe4\xbb\x8a\xe5\xa4\xa9\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9a\x84\xe5\x9b\xb0'
# 解码
s = bs.decode("utf-8")
print(s)
# 编码
bss = s.encode("gbk")
print(bss)
关于bytes,非ascii中的内容,展示的时候都是\x.. 如果是ascii中的内容,原样的输出.
name = "alex昨天吃多了"
bs = name.encode("gbk") # b'alex\xd7\xf2\xcc\xec\xb3\xd4\xb6\xe0\xc1\xcb'
print(bs)
bss = name.encode("utf-8") # b'alex\xe6\x98\xa8\xe5\xa4\xa9\xe5\x90\x83\xe5\xa4\x9a\xe4\xba\x86'
print(bss)