- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在寻找有关为什么我有意外引用计数的解释。是的,我已经知道 sys.getrefcount()
会将预期计数增加 1
。这不是下面发生的情况。
我希望函数 test(a)
显示 3
而不是 4
。第四个引用来自哪里?
In [2]: import sys
In [3]: a = []
In [4]: sys.getrefcount( a )
Out[4]: 2
In [5]: def test( x ): print "x ref count = {}".format( sys.getrefcount( x ) )
In [6]: test( a )
x ref count = 4
In [7]: sys.getrefcount( a )
Out[7]: 2
最佳答案
堆栈是第四个引用。
为了将 a
的值发送给函数,Python 首先计算 a
并将结果放在堆栈顶部。这是一个引用,就像 test()
函数中的 x
变量是一个引用一样。
您可以在字节码中看到这一点:
>>> import dis
>>> dis.dis(compile('test( a )', '', 'eval'))
1 0 LOAD_NAME 0 (test)
3 LOAD_NAME 1 (a)
6 CALL_FUNCTION 1
9 RETURN_VALUE
CALL_FUNCTION
opcode在调用在堆栈上找到的下一个对象之前,从堆栈加载参数(这里的1
表示从堆栈加载1个位置参数)( test
引用的对象,由 LOAD_NAME
放置在那里)。
这与 sys.getrefcount()
调用添加额外引用的原因完全相同;在调用函数之前,也必须首先将对象添加到堆栈中。
关于Python sys.getrefcount() 显示意外的第四个引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30143869/
下面是示例: from sys import getrefcount getrefcount(1) #1 getrefcount(2) #2 getrefcount('a') #3 a='a' ge
link text 我得到了引用计数的概念 所以当我执行“del astrd”时,引用计数降为零并且 astrd 被 gc 收集? 这是示例代码。这些代码是我在昨天的问题之后开发的:link text
我想知道为什么此代码打印 4而不是 3 .第四个引用在哪里? import sys def f(a): print(sys.getrefcount(a)) a = [1, 2, 3] f(a)
下面是 python Idle 中的代码片段,为什么 sys.getrefcount(a) 返回 4? 下面给出了在 python idle 中执行的代码片段 import sys a = [] b
我正在寻找有关为什么我有意外引用计数的解释。是的,我已经知道 sys.getrefcount() 会将预期计数增加 1。这不是下面发生的情况。 我希望函数 test(a) 显示 3 而不是 4。第四个
为什么 sys.getrefcount() 对每个大数字或简单字符串返回 3?这是否意味着 3 个对象驻留在程序中的某个位置?另外,为什么不设置 x=(非常大的数字)增加该对象的引用计数?这 3 个引
这个问题已经有答案了: Unexpected value from sys.getrefcount (1 个回答) 已关闭 6 年前。 阅读完 sys.getrefcount 后,我尝试使用下面的代码
在 Python 2.7.5 下 >>> import sys >>> sys.getrefcount(10000) 3 三个refcount在哪里? PS:什么时候 10000 PyIntObjec
import sys a = 10 b = a print sys.getrefcount(a) b=1 print sys.getrefcount(b) 输出: 22 614 我的python解释器
在 Python 2.7.5 下 >>> import sys >>> sys.getrefcount(10000) 3 三个refcount在哪里? PS:什么时候 10000 PyIntObjec
当我输入时: >>> astrd = 123 >>> import sys >>> sys.getrefcount(astrd) 3 >>> 我不明白 astrd 在哪里使用了 3 次? 最佳答案 被
据我了解,sys.getrefcount() 返回对象的引用数,在以下情况下“应该”为 1: import sys,numpy a = numpy.array([1.2,3.4]) print sys
我是一名优秀的程序员,十分优秀!