And*_*ers 13 python collections tuples list
我的Python程序中有一个相当大的列表(> 1K元素).永远不会修改列表 - 不添加,删除或更改任何元素.将对象放入元组而不是列表有什么缺点吗?
一方面,元组是不可变的,因此符合我的要求.另一方面,使用如此大的元组只是感觉不对.在我看来,元组一直是小集合.这是一个双人,一个三人,一个四人......不是一个二千五十二重复.
我对大元组的恐惧是否合理?对性能,单声道或其他不良做法有害吗?
Tim*_*ers 17
在CPython中,继续吧.在内部,列表和元组的存储之间的唯一真正的区别是,C级阵列保持的元组元素被分配在所述元组对象,而一个列表对象包含一个指向到一个C级阵列保持列表元素,与列表对象分开分配.列表实现需要这样做,因为列表可能会增长,因此包含C级向量的内存可能需要更改其基址.元组不能改变大小,因此它的内存直接分配在元组对象中.
我已经创建了具有数百万个元素的元组,但我却活着打算关于它;-)
在CPython中,甚至可能有"理由"偏好巨型元组:循环垃圾收集方案如果元组仅包含不可变对象,则免除定期扫描的元组.然后元组永远不会成为循环的一部分,因此循环gc可以忽略它.相同的优化不能用于列表; 只是因为一个列表在一次循环gc运行期间只包含不可变对象,所以没有说明在下一次运行期间是否仍然如此.
这几乎从来都不是很重要,但它可以在长期运行的程序中节省百分之一左右,免除巨型元组的好处越大,它们就越大.