一、对象缓存池是什么
对于常用的数字和字符,python解释器会在第一次创建的时候对对象进行缓存。稍后在使用的时候,就直接把变量名关联到缓存对象上。这样可以节省内存开销,也可以提高性能。
示例程序:
#!/usr/bin/env python3
a = 1
b = 1
c = 'a'
d = 'a'
print("\033[1;34m变量a的十进制内存地址为:\033[1;35m%s\033[0m"%(id(a)))
print("\033[1;34m变量b的十进制内存地址为:\033[1;35m%s\033[0m"%(id(b)))
print("\033[1;34m变量a的十六进制内存地址为:\033[1;35m%s\033[0m"%(hex(id(a))))
print("\033[1;34m变量b的十六进制内存地址为:\033[1;35m%s\033[0m"%(hex(id(b))))
print(" ")
print("\033[1;34m变量c的十进制内存地址为:\033[1;35m%s\033[0m"%(id(c)))
print("\033[1;34m变量d的十进制内存地址为:\033[1;35m%s\033[0m"%(id(d)))
print("\033[1;34m变量c的十六进制内存地址为:\033[1;35m%s\033[0m"%(hex(id(c))))
print("\033[1;34m变量d的十六进制内存地址为:\033[1;35m%s\033[0m"%(hex(id(d))))
程序运行结果:
变量a的十进制内存地址为:140044017019232 变量b的十进制内存地址为:140044017019232 变量a的十六进制内存地址为:0x7f5e89e32960 变量b的十六进制内存地址为:0x7f5e89e32960 变量c的十进制内存地址为:140044018443016 变量d的十进制内存地址为:140044018443016 变量c的十六进制内存地址为:0x7f5e89f8e308 变量d的十六进制内存地址为:0x7f5e89f8e308
可以看到变量a和变量b的内存地址是相同的。变量c和变量d的内存地址也都是相同。
二、常见对象缓存池与范围(不全)
1. 整型
-5 ~ 256
三、参考博文
https://blog.csdn.net/upHailin/article/details/79875057?utm_source=blogxgwz4