可爱的 Python:获得版本 2.0
2007-03-29 12:08:12 来源:WEB开发网核心提示: 无用信息收集Python 的内存管理对于大多数普通 Python 程序员来说可能相当神秘,传统上,可爱的 Python:获得版本 2.0(7),Python 使用一个引用计数方案来在对象不再能从任何名称访问时删除它们,不过,永远也不能确切地知道何时无用信息收集将吃掉一些 CPU 周期;因此
无用信息收集
Python 的内存管理对于大多数普通 Python 程序员来说可能相当神秘。传统上,Python 使用一个引用计数方案来在对象不再能从任何名称访问时删除它们。不过,如果在程序中使用循环引用,引用计数方法从理论上说容易造成内存泄露。例如,以下代码会破坏引用计数:
Python 中的循环引用
>>>
class
MyClass
:
pass
....
>>> myobject = MyClass()
>>> myobject.me = myobject
>>>
del
myobject
这时,不可能访问 myobject ,但它还未被删除,因为引用计数增加了两次,但只消耗了一次。
虽然这听上去很严重,但大多数程序员永远不会遇到由于类似上述代码而产生的任何实际问题。在大多数情况下,不会一上来就使用循环引用,即使使用它们,大多数情况下,内存泄露也是很轻微的(可以轻易地构造人为的危险情况;例如,向上例中添加 myobject.big='#'*10**6 )。
在任何情况下,Python 2.0 都会添加一个编译时选项,用于标记和清扫无用信息收集 (GC)。大多数 Python 2.0 发行版似乎都是使用这一选项编译的;但如果您需要,可以编译关闭无用信息收集选项的自己的 Python 版本。无论在哪种情况下,都仍使用引用计数;这只是类似上面的泄露是否被清除的问题。
在某些平台上,例如嵌入式系统,GC 可能不受欢迎。无用信息收集要占用一些 CPU 周期(不是很多,但有一些)。可能最为重要的是,引用计数是在程序行为中确定的,而无用信息收集则不是。这就是说,永远也不能确切地知道何时无用信息收集将吃掉一些 CPU 周期;因此,使用 GC 版本的 Python 将导致在不同的运行中,同样的程序有不同的行为(在时间安排方面)。
更多精彩
赞助商链接