Squ*_*art 4 python memory dictionary list
我注意到当使用sys.getsizeof()来检查列表和字典的大小时,会发生一些有趣的事情.
我有:
a = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)
大小为56字节(空列表的大小为36,所以它有意义,因为20/5 = 4)
但是,在我删除列表中的所有项目后(使用.remove或del),大小仍为56.这对我来说很奇怪.大小不应该回到36?
任何解释?
Ned*_*der 11
删除元素时,列表不承诺释放内存.列表被过度分配,这就是他们如何为附加元素分摊O(1)性能.
数据结构的时间性能详情:http://wiki.python.org/moin/TimeComplexity
增加容器的大小可能是一项昂贵的操作,因为它可能需要在存储器中移动很多东西.因此,Python几乎总是分配比列表当前内容所需的内存更多的内存,允许对列表的任何单独添加都很有可能在不需要移动内存的情况下执行.出于类似的原因,列表可能不会立即或永远释放已删除元素的内存.
但是,如果使用切片分配一次删除所有元素:
a[:] = []
Run Code Online (Sandbox Code Playgroud)
这似乎重置了它.但是,这是一个实现细节.
| 归档时间: |
|
| 查看次数: |
873 次 |
| 最近记录: |