首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“sys.getrefcount()”返回值

“sys.getrefcount()”返回值
EN

Stack Overflow用户
提问于 2011-09-25 16:13:51
回答 3查看 3.2K关注 0票数 5

为什么

代码语言:js
复制
sys.getrefcount()

对于每个大数字或简单字符串返回3?这是否意味着3个对象驻留在程序中的某个地方?另外,为什么设置x=(非常大的数字)不会增加该对象的引用计数?这3个引用计数是由我调用getrefcount产生的吗?谢谢你澄清这一点。

例如:

代码语言:javascript
复制
>>> sys.getrefcount(4234234555)
3
>>> sys.getrefcount("testing")
3
>>> sys.getrefcount(11111111111111111)
3
>>> x=11111111111111111
>>> sys.getrefcount(11111111111111111)
3
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-25 17:13:29

大整数对象不会被解释器重用,因此您会得到两个不同的对象:

代码语言:javascript
复制
>>> a = 11111
>>> b = 11111
>>> id(a)
40351656
>>> id(b)
40351704

sys.getrefcount(11111)总是返回相同的数字,因为它测量新对象的引用计数。

对于小整数,Python总是重用同一个对象:

代码语言:javascript
复制
>>> sys.getrefcount(1)
73

通常,您只能获得对新对象的一个引用:

代码语言:javascript
复制
>>> sys.getrefcount(object())
1

但是为了优化性能,Python会在一个特殊的预分配区域分配整数,我怀疑额外的两个引用与此有关。

您可以在这里查看C实现:http://svn.python.org/view/python/trunk/Objects/intobject.c?view=markup

编辑:我并不是说我理解底层细节中发生的事情,我认为有几件事在工作中缓存了临时引用:

代码语言:javascript
复制
print sys.getrefcount('foo1111111111111' + 'bar1111111111111') #1
print sys.getrefcount(111111111111 + 2222222222222)            #2
print sys.getrefcount('foobar333333333333333333')              #3
票数 10
EN

Stack Overflow用户

发布于 2011-09-25 16:46:49

  1. Python缓存小字符串和整数,以节省对象构建成本。
  2. 交互式Python解释器保存对您输入的每个文字的临时引用。比较getrefcount('foobar')使用getrefcount('foo' + 'bar')。(在后一种情况下,解释器引用'foo''bar'。)
  3. manual

返回的计数通常比您预期的大1,因为它将(临时)引用作为参数包含到getrefcount()

票数 6
EN

Stack Overflow用户

发布于 2021-02-25 23:09:38

似乎当您将一个直接数作为参数传递给sys.getrefcount时,您有3个引用:

  • 对象本身为1(逻辑);
  • 1(临时)表示作为参数传递给sys.getrefcount的对象;
  • 我假设解释器为1(临时),我认为它将原始数字(或字符串或其他任何内容)转换为可解释的对象。

例如,让我们考虑一下:

代码语言:javascript
复制
>>> sys.getrefcount(123456)
3

>>> a = 123456
>>> sys.getrefcount(a)
2

我真的不知道Python的想法是什么,但它仍然很有趣。我只能猜测原始整数(ref #1)被临时转换成一个int对象(ref #2),然后作为参数传递给sys.getrefcount (ref #3)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7544395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档