Python中如何理解小整数对象池与字符串intern机制的工作原理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1998个文字,预计阅读时间需要8分钟。
is用于判断两个对象是否为同一对象,具体来说,是判断两个对象在内存中的位置是否相同。Python为了提高效率,节省内存,在实现上大量使用了缓存技术和字符串intern技术。整数和字符串‘’使用了intern技术。
is用于判断两个对象是否为同一个对象,具体来说是两个对象在内存中的位置是否相同。
python为了提高效率,节省内存,在实现上大量使用了缓冲池技术和字符串intern技术。
整数和字符串是不可变对象,也就意味着可以用来共享,如100个“python”字串变量可以共享一个“python”字符串对象,而不是创建100个“python”字符串。
小整数对象池
为了应对小整数的频繁使用,python使用对小整数进行了缓存,默认范围为[-5,256],在这个范围内的所有整数被python完全地缓存,当有变量使用这些小整数时,增加对应小整数对象的引用即可。
>>> i = -5 >>> j = -5 >>> i is j # i和j是同一个对象 True >>> i = 256 >>> j = 256 >>> i is j # i和j是同一个对象 True >>> i = 257 >>> j = 257 >>> i is j # i和j是不同对象 False
由上面的实例可以看到,当变量在[-5,256]之间时,两个值相同的变量事实上会引用到同一个小整数对象上,也就是小整数对象池中的对象,而不会去创建两个对象。
本文共计1998个文字,预计阅读时间需要8分钟。
is用于判断两个对象是否为同一对象,具体来说,是判断两个对象在内存中的位置是否相同。Python为了提高效率,节省内存,在实现上大量使用了缓存技术和字符串intern技术。整数和字符串‘’使用了intern技术。
is用于判断两个对象是否为同一个对象,具体来说是两个对象在内存中的位置是否相同。
python为了提高效率,节省内存,在实现上大量使用了缓冲池技术和字符串intern技术。
整数和字符串是不可变对象,也就意味着可以用来共享,如100个“python”字串变量可以共享一个“python”字符串对象,而不是创建100个“python”字符串。
小整数对象池
为了应对小整数的频繁使用,python使用对小整数进行了缓存,默认范围为[-5,256],在这个范围内的所有整数被python完全地缓存,当有变量使用这些小整数时,增加对应小整数对象的引用即可。
>>> i = -5 >>> j = -5 >>> i is j # i和j是同一个对象 True >>> i = 256 >>> j = 256 >>> i is j # i和j是同一个对象 True >>> i = 257 >>> j = 257 >>> i is j # i和j是不同对象 False
由上面的实例可以看到,当变量在[-5,256]之间时,两个值相同的变量事实上会引用到同一个小整数对象上,也就是小整数对象池中的对象,而不会去创建两个对象。

