Mar*_*som 50 python list python-internals
我在使用sys.getsizeof
相同的列表时看到了一些不一致的地方.(Python 2.7.5)
>>> lst = [0,1,2,3,4,5,6,7,8,9]
>>> sys.getsizeof(lst)
76
>>> lst2 = list(lst)
>>> sys.getsizeof(lst2)
104
>>> lst3 = list(lst2)
>>> sys.getsizeof(lst3)
104
>>> sys.getsizeof(lst[:])
76
>>> sys.getsizeof(lst2[:])
76
Run Code Online (Sandbox Code Playgroud)
有人有简单的解释吗?
Ign*_*ams 54
使用列表文字,VM将创建具有设置长度的列表.将序列传递给list()
构造函数时,元素将逐个(via list.extend()
)添加,因此在适当时调整列表的大小.由于调整大小操作需要进行分配以分摊成本,因此最终列表通常会大于源列表.
Aar*_*our 11
创建列表文字时,报告的大小是保存数据所需的最小大小.你可以看到这个,因为如果你附加一个元素,大小会跳起来.但是,当你使用list
它来复制它时,它会分配一些额外的空间 - 在它重新分配之前需要一些附加(在你的情况下,我怀疑第8个追加将会这样做 - 它每个元素需要4个字节).这些分配行为可能有所不同,但我不确定这可能是什么.