使用和不使用":"运算符删除python中的列表

Voo*_*d92 2 python memory garbage-collection list

我一直在使用python很长一段时间,我对垃圾收集,内存管理以及删除变量和释放内存的真正处理方面的几个问题感到困惑.

>>> pop = range(1000)
>>> p = pop[100:700]
>>> del pop[:]
>>> pop
[]
>>> p
[100.. ,200.. 300...699]
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,会发生这种情况.但,

>>> pop = range(1000)
>>> k = pop   
>>> del pop[:]
>>> pop 
[]
>>> k
[]
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,它意味着k只是指向列表'pop'.

第一部分问题:

但是,第一个代码块中发生了什么?包含[100:700]元素的内存是否未被删除,或者在创建列表"p"时是否重复?

问题的第二部分:

另外,我尝试过尽可能包含gc.enable和gc.collect语句,但两个代码中的内存利用率没有变化.这有点令人费解.python是不是没有将可用内存返回给操作系统,这不是很糟糕吗?如果我在我做过的小研究中错了,请纠正我.提前致谢.

Ign*_*ams 5

切片序列会产生一个新序列,其中包含适当元素的浅层副本.

将内存返回到操作系统可能不好,因为脚本可能会转向并创建新对象,此时Python必须再次从操作系统请求内存.