“sys.getrefcount()” return value

发布于 2021-01-29 14:09:46

Why does

sys.getrefcount()

return 3 for every large number or simple string?Does that mean that 3 objects
reside somewhere in the Program?Also,why doesn’t setting x=(very large number)
increase that object’s ref count?Do those 3 ref counts result from my call to
getrefcount? Thank you for clarifying this.

for instance:

>>> sys.getrefcount(4234234555)
3
>>> sys.getrefcount("testing")
3
>>> sys.getrefcount(11111111111111111)
3
>>> x=11111111111111111
>>> sys.getrefcount(11111111111111111)
3
关注者
0
被浏览
172
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Large integer objects are not reused by the interpretor, so you get two
    distinct objects:

    >>> a = 11111
    >>> b = 11111
    >>> id(a)
    40351656
    >>> id(b)
    40351704
    

    sys.getrefcount(11111) always returns the same number because it measures the
    reference count of a fresh object.

    For small integers, Python always reuses the same object:

    >>> sys.getrefcount(1)
    73
    

    Usually you would get only one reference to a new object:

    >>> sys.getrefcount(object())
    1
    

    But integers are allocated in a special pre-malloced area by Python for
    performance optimization, and I suspect the extra two references have
    something to do with this.

    You can look at the C implementation here:
    http://svn.python.org/view/python/trunk/Objects/intobject.c?view=markup

    Edit: I do not claim to understand what’s going on in lowlevel details, I
    think there are several things at work that cache temporary references:

    print sys.getrefcount('foo1111111111111' + 'bar1111111111111') #1
    print sys.getrefcount(111111111111 + 2222222222222)            #2
    print sys.getrefcount('foobar333333333333333333')              #3
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看