0.缘起
之前逛博客的时候,看到博文教程在描述python的基于值的内存管理模式的时候采用了类似下面这个例子的例子:
num=1
num2=1
print(id(num)
print(id(num2))
此时运行代码,可以得到结果:
不难发现num和num2的id相同,作者希望通过如上的例子说明,假如为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。
此时我们不妨再试试看其他的情况
num=3000
num2=3000
print(id(num)
print(id(num2))
此时运行代码,可以得到结果:
此时可以发现num和num2在值相同的情况下,其id也是不相同
1. 真正的原因
实际上在第一个例子中所出现id相同的情况是由python的对象池引起的,对象池是存放了一批已经创建好的对象的池,它是一个用来维护对象的结构。当程序需要使用对象的时候,可以直接从池中获取该对象,而不是实例化一个新的对象。python中的整型对象池已经生成了[0,256]间的所有整数,一旦超出这个界限,就需要生成新的整型对象。