小整数对象池,大整数对象池

小整数对象池 (在python内置了)

整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池,避免为整数频繁申请和销毁内存空间。

Python对小整数的定义是[-5,257]这些整数对象是提前建立好的,不会被垃圾回收。在一个Python的程序中,所有位于这个范围内的整数使用的都是同一个对象。

同理,单个字母也是这样的。 

但是当定义2个相同的字符串时,引用计数为0,触发垃圾回收



大整数对象池 

每一个大整数,均创建了一个对象



intern机制 

a1="helloworld"

a2="helloworld"

a3="helloworld"

a4="helloworld"

a5="helloworld"

a6="helloworld"

a7="helloworld"

a8="helloworld"

a9="helloworld"


python会不会创建9个对象呢?在内存中会不会开辟9个"helloworld"的内存空间呢?想一下,如果是这样的话,我们写10000个对象,

那他岂不是开辟了10000个helloworld所占的内存空间了呢?如果真这样,内存不就爆了吗?所以python中有这样一个机制-----intern

机制,让他只占用一个"helloworld"所占的内存空间。靠引用计数去维护何时释放。

a="hello"

b="hello"


id(a)

4555765776

id(b)

4555765776 


a = "hello world"

b = "hello world"

id(a)

4553372528

id(b)

4555786352



总结

1.小证书【-5,257】共用对象,常驻内存

2.单个字符共用对象,常驻内存 

3.单个单词,不可修改,默认开启intern机制,共用对象,引用计数为0,则销毁 

4.字符串(含有空格),不可修改,没开启intern机制,不共用对象,引用计数为0,销毁



你可能感兴趣的:(小整数对象池,大整数对象池)