- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了引用计数的概念
所以当我执行“del astrd”时,引用计数降为零并且 astrd 被 gc 收集?
这是示例代码。这些代码是我在昨天的问题之后开发的:link text
一个.py:
def abc():
print "Hello"
print "123"
print '345'
二.py:
import one
#reload(one)
#def defg():
one.abc()
三.py:
import os,sys,gc
from time import sleep
import two
#reload(two)
#two.defg()
sleep(20)
directory = os.listdir('.')
for filename in directory:
if filename[-3:] == 'pyc':
print '- ' + filename
print sys.getrefcount(filename)
file_name = os.path.splitext (filename)[0]
del file_name # remove the local reference
del sys.modules[os.path.splitext (filename)[0]] # removes import
gc.collect() # garbage collect
#del sys.modules[filename]
#del filename
#os.remove(filename)
我在 three.py 中所做的是否正确?是否有任何不必要的步骤?如果是,为什么?
请帮我解决这个问题。
最佳答案
我相信当引用计数达到零时,内存会自动释放。 GC 不参与。
python GC是可选的,只有在存在引用循环不可达的对象时才使用。事实上,如果您确定您的程序不会创建引用循环,您可以调用 gc.disable()
。
至于原来的问题:
del astrd
时,您从本地命名空间中删除了 astrd 的绑定(bind)一个对象的引用(无论 astrd 引用是什么)。del
不会删除对象,它会取消绑定(bind)引用。如果取消绑定(bind)引用导致引用计数达到零,则会发生对象删除。请注意,以上仅适用于 CPython。 Jython 和 IronPython 使用 JVM/CLR GC 机制,我相信根本不使用引用计数。
方便的 gc.get_objects
返回 python 解释器跟踪的所有对象实例的列表。示例:
import gcclass test(object): passdef number_of_test_instances(): return len([obj for obj in gc.get_objects() if isinstance(obj, test)])for i in range(100): t = test()print "Created and abandoned 100 instances, there are now", \ number_of_test_instances(), \ "instances known to the python interpreter."# note that in normal operation, the GC would# detect the unreachable objects and start# collecting them right awaygc.disable()for i in range(100): t = test() t.t = tprint "Created and abandoned 100 instances with circular ref, there are now", \ number_of_test_instances(), \ "instances known to the python interpreter."gc.collect()print "After manually doing gc.collect(), there are now", \ number_of_test_instances(), \ "instances known to the python interpreter."
运行这个程序会得到:
Created and abandoned 100 instances, there are now 1 instances known to the python interpreter.Created and abandoned 100 instances with circular ref, there are now 100 instances known to the python interpreter.After manually doing gc.collect(), there are now 1 instances known to the python interpreter.
关于python - sys.getrefcount 继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/759906/
下面是示例: 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
我是一名优秀的程序员,十分优秀!