为何元素相同、创建方式不同的两个列表sys.getsizeof结果不同?
为何元素数量相同的列表占用内存不同?
这是因为Python列表作为动态数组,会预分配额外的内存空间以优化后续添加元素的性能,而不同的列表创建方式触发的预分配策略存在差异:
list(range(1, 10))的创建逻辑:range对象是已知准确长度的可迭代对象,list构造函数会先获取其长度,然后初始化一个仅预分配少量额外空间的列表。在你的Python 3.10.5环境中,9个元素的列表预分配了11个元素槽,总内存计算为:基础列表对象大小(40字节) + 11个元素指针(每个8字节),即40 + 11*8 = 128字节。字面量
[1,2,...,9]的创建逻辑:
解释器处理列表字面量时,会采用更激进的预分配策略,为后续可能的修改预留更多空间。在你的环境中,9个元素的字面量列表预分配了14个元素槽,总内存为:40 +14*8=152字节。
这种差异是Python为了适配不同使用场景的性能优化设计,属于正常现象,不影响列表的功能。
内容的提问来源于stack exchange,提问作者Kartik
相关产品推荐
相关产品推荐

