切片列表会释放内存吗?

时间:2014-08-11 16:22:45

标签: python list python-2.7

我的名为l的python列表包含100个项目。 如果我这样做,

l = l[25:100]

这会释放前25个项目的内存吗?

如果没有,怎么能实现呢?

2 个答案:

答案 0 :(得分:3)

如果没有其他对l的引用,那么将释放内存。

会发生什么:

  • l[25:100]创建一个 new 列表对象,其中引用了l索引25到100(不包括)的值。
  • l 反弹现在引用新的列表对象。
  • 以前由l约束的旧列表对象的引用计数减1。
  • 如果引用计数降为0,则删除以前由l绑定的旧列表对象,并释放内存。

答案 1 :(得分:0)

还有一个选项不会分配新列表:del l[:25]将从现有列表中删除前25个条目,将以下条目移除。对l的任何其他引用仍将指向它,但它会被更改为更短的列表。

请注意,引用语义也适用于每个项目;他们可能有来自列表以外的其他地方的参考。它也不能保证它们会立即被释放。