Skip to content
On this page

对象池与intern

1. 字母小整数对象池

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

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

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

py
a = 10
b = 10
a is b  # True

c = "a"
d = "a"
c is d  # True

2. intern

对于纯字母数字构成的字符串,Python使用了intern机制,类似与C#当中的字符串拘留池。

字符串是不可变类型,当我们新建一个字符串对象时,解释器会先搜索是否已经存在相同的字符串,如果存在则直接将其地址赋值给变量,如果没有则新建。当字符串对象引用计数为0时,会被GC回收。

py
a = "hello123"
b = "hello123"
a is b  # True

c = "Hello world"
d = "Hello world"
c is d  # False  intern机制仅适用于纯字母数字

e = str(123)
f = "123"
e is f  # False intern适用于类型转换的对象

Released under the MIT License.