我使用 python 已经有很长一段时间了,我对垃圾收集、内存管理以及删除变量和释放内存的实际处理方面的一些问题感到困惑。
>>> pop = range(1000)
>>> p = pop[100:700]
>>> del pop[:]
>>> pop
[]
>>> p
[100.. ,200.. 300...699]
在上面的代码中,发生了这种情况。但,
>>> pop = range(1000)
>>> k = pop
>>> del pop[:]
>>> pop
[]
>>> k
[]
在第二种情况下,这意味着 k 只是指向列表“pop”。
问题的第一部分:
但是,第一个代码块中发生了什么?包含 [100:700] 元素的内存没有被删除还是在创建列表“p”时重复?
问题的第二部分:
此外,我尝试在可能的情况下在两者之间包含 gc.enable 和 gc.collect 语句,但是这两个代码中的内存利用率都没有变化。这有点令人费解。python没有将空闲内存返回给操作系统,这不是很糟糕吗?如果我在我所做的小研究中错了,请纠正我。提前致谢。