在一本书中找到了以下代码,但无法获得完整的解释。
x = array('d', [0] * 1000000)
x = array('d', [0]) * 1000000
在第一种情况下,python代码将创建一个长度为1000000的数组,而在第二部分中,将创建单个大小的数组并将大小乘以相同的系数。 第二种情况下的代码比第一种情况下的代码快100倍。
速度差异的确切原因是什么?数组的python实现如何发挥作用?
答案 0 :(得分:4)
Python list
存储Python对象,而array.array
对象存储原始C数据类型。
第一行要求分别处理[0] * 1000000
中的每个对象,跟随指针并执行类型检查,动态分派和引用计数,以及全部一百万次以处理每个元素并将其数据转换为原始C double。每个元素碰巧都是相同的,但是array
构造函数并不知道。建立和清理百万元素列表的费用也很高。
第二行更简单。 Python只能memcpy
数组内容一百万次。