使用python 3.5在不同的pc中使用相同的代码输出不同的输出

时间:2016-10-13 17:28:47

标签: python python-3.x

我有这段代码:

import gc

def hacerciclo():
    l=[0]
    l[0]=l

recolector=gc.collect()
print("Garbage collector %d" % recolector)
for i in range (10):
    hacerciclo()

recolector=gc.collect()
print("Garbage collector %d" % recolector)

这是使用gc.collect()的示例代码。问题是相同的代码在不同的计算机上显示不同的输出。

一台电脑显示: 垃圾收集器1 垃圾收集器10 其他人表示: 垃圾收集器0 垃圾收集器10

为什么会这样?

1 个答案:

答案 0 :(得分:3)

  

当前版本的Python使用引用计数来跟踪分配的内存。 Python中的每个对象都有一个引用计数,指示有多少对象指向它。当此引用计数达到零时,将释放该对象。这适用于大多数程序。然而,引用计数存在一个基本缺陷,这是由于所谓的参考周期。参考周期的最简单示例是一个引用自身的对象。例如:

>>> l = []
>>> l.append(l)
>>> del l
  

创建的列表的引用计数现在是一个。但是,因为它无法从Python内部到达并且不能再次使用,所以应该将其视为垃圾。在当前版本的Python中,永远不会释放此列表。

     

创建参考周期通常不是良好的编程习惯,几乎总是可以避免。但是,有时很难避免创建引用周期,有时程序员甚至都没有意识到它正在发生。对于诸如服务器之类的长期运行程序,这尤其麻烦。人们不希望他们的服务器内存不足,因为引用计数无法释放无法访问的对象。对于大型程序,很难找到如何创建参考周期。

来源:http://arctrix.com/nas/python/gc/

以下链接包含您正在使用的示例示例,它还解释了:

http://www.digi.com/wiki/developer/index.php/Python_Garbage_Collection