我已经使用 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 没有将可用内存返回给操作系统,这不是很糟糕吗?如果我在我所做的小研究中错了,请纠正我。提前致谢。
最佳答案
对序列进行切片会产生一个新序列,其中包含适当元素的浅拷贝。
将内存返回给操作系统可能不好,因为脚本可能会转过来创建新对象,此时 Python 将不得不再次从操作系统请求内存。
关于python - 使用和不使用 ':' 运算符删除 python 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11203990/