码迷,mamicode.com
首页 > 编程语言 > 详细

[Python源码剖析]字符缓冲池intern机制

时间:2017-08-28 23:50:09      阅读:344      评论:0      收藏:0      [点我收藏+]

标签:when   delete   python   缓冲池   from   function   state   cat   span   

static PyStringObject *characters[UCHAR_MAX + 1];
...

/* This dictionary holds all interned strings.  Note that references to
   strings in this dictionary are *not* counted in the string‘s ob_refcnt.
   When the interned string reaches a refcnt of 0 the string deallocation
   function will delete the reference from this dictionary.

   Another way to look at this is that to say that the actual reference
   count of a string is:  s->ob_refcnt + (s->ob_sstate?2:0)
*/

  Python源码[Object/stringobject.c]中UCHAR_MAX = 255.

所以Python解释器会缓冲256个字符串, 第257个字符串多次赋值不同的变量名, id()查看的结果就不同了:

>>> len(locals().keys())
4
>>> for i in range(256):
...     locals()[‘a%s‘%i]= str(i)
...
>>> len(locals().keys())
261
>>> a=‘247‘
>>> id(a247)
4301254088
>>> id(a)
4301235264
>>>

  可见intern机制可以缓存256个PyStringObject对象. 前三章看完了, 就主要两个知识点, 小整数集合范围[-5, 257), 字符缓冲池intern机制缓存256即0xff个字符串.

[Python源码剖析]字符缓冲池intern机制

标签:when   delete   python   缓冲池   from   function   state   cat   span   

原文地址:http://www.cnblogs.com/sigai/p/7442095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!