• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

对Python中小整数对象池和大整数对象池的使用详解

python 搞代码 4年前 (2022-01-08) 19次浏览 已收录 0个评论

今天小编就为大家分享一篇对Python中小整数对象池和大整数对象池的使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

来源gaodai$ma#com搞$代*码*网1. 小整数对象池

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

Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。在一个 Python 的程序中,无论这个整数处于LEGB中的哪个位置,

所有位于这个范围内的整数使用的都是同一个对象。同理,单个字母也是这样的。

 In [1]: a=-5 In [2]: b=-5 In [3]: a is b Out[3]: True In [4]: a=256 In [5]: b=256 In [6]: a is b Out[6]: True In [7]: a=1000 In [8]: b=1000 In [9]: a is b Out[9]: False intern机制处理空格一个单词的复用机会大,所以创建一次,有空格创建多次,但是字符串长度大于20,就不是创建一次了。 In [13]: a="abc" In [14]: b="abc" In [15]: a is b Out[15]: True In [16]: a="helloworld" In [17]: b="helloworld" In [18]: a is b Out[18]: True In [19]: a="hello world" In [20]: b="hello world" In [21]: a is b Out[21]: False s1 = "abcd" s2 = "abcd" print(s1 is s2) s1 = "a" * 20 s2 = "a" * 20 print(s1 is s2) s1 = "a" * 21 s2 = "a" * 21 print(s1 is s2) s1 = "ab" * 10 s2 = "ab" * 10 print(s1 is s2) s1 = "ab" * 11 s2 = "ab" * 11 print(s1 is s2) # True # True # False # True # False 

2.大整数对象池。说明:终端是每次执行一次,所以每次的大整数都重新创建,而在pycharm中,每次运行是所有代码都加载都内存中,属于一个整体,所以

这个时候会有一个大整数对象池,即处于一个代码块的大整数是同一个对象。c1 和d1 处于一个代码块,而c1.b和c2.b分别有自己的代码块,所以不相等。

 C1.b is C2.b In [22]: a=1000 In [23]: b=1000 In [24]: a is b Out[24]: False In [25]: a=-1888 In [26]: b=-1888 In [27]: a is b Out[27]: False In [28]: c1 = 1000 d1 = 1000 print(c1 is d1) # True class C1(object): a = 100 b = 100 c = 1000 d = 1000 class C2(object): a = 100 b = 1000 print(C1.a is C1.b) # True print(C1.a is C2.a) # True print(C1.c is C1.d) # True print(C1.b is C2.b) # False 

以上就是对Python中小整数对象池和大整数对象池的使用详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:对Python中小整数对象池和大整数对象池的使用详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址