Jon*_*ein 6 python memory object
说有
class thing(object):
def __init__(self):
self.text = "foo"
def bar():
obj = thing()
#do something with the object
bar()
Run Code Online (Sandbox Code Playgroud)
是在bar()完成之后从内存中删除obj还是将其仍在内存中,因为它是bar的局部变量而无法访问?(当然,这是假定obj未放入全局或外部容器(例如字典或列表)中)。
obj
函数退出时,对象引用将被删除。
这是因为CPython(默认的Python实现)使用引用计数来跟踪对象的生存期。obj
是局部变量,仅在函数持续时间内存在。thing()
是一个只有一个引用的实例obj
,并且在obj
清理后,引用计数降至0,thing()
并立即删除。
如果您使用的是PyPy,IronPython,Jython或其他实现,则对象破坏可能会延迟,因为实现可以自由使用不同的垃圾回收方案。这仅对实现__del__
方法很重要,因为它们的调用可能会延迟。
如果您想进一步了解Python名称的工作原理,建议您阅读有关Python名称和值的精彩事实和神话。
归档时间: |
|
查看次数: |
2665 次 |
最近记录: |