附录三:对象缓存池

一、对象缓存池是什么

对于常用的数字和字符,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

http://www.myheyufei.com/index.php/2018/05/12/python3%e5%ad%a6%e4%b9%a0%e7%ac%94%e8%ae%b0%e4%b9%8b%e6%95%b0%e6%8d%ae%e9%a2%84%e7%bc%93%e5%86%b2%ef%bc%88%e6%95%b0%e6%8d%ae%e7%bc%93%e5%86%b2%e6%b1%a0%ef%bc%89/

Previous Post

附录二:编码风格

Next Post

附录四:常用内置函数

Related Posts