在书中找到以下代码,但无法获得完整的解释。

x = array('d', [0] * 1000000)
x = array('d', [0]) * 1000000

在第一种情况下,python代码将创建一个长度为1000000的数组,而在第二部分中,将创建一个单一大小的数组,并将大小乘以相同的因子。
第二种情况下的代码比第一种情况下的代码快100倍。

速度差异的确切原因是什么?数组的python实现如何发挥作用?

最佳答案

Python list存储Python对象,但是array.array对象存储原始C数据类型。

第一行要求分别处理[0] * 1000000中的每个对象,跟随指针并执行类型检查,动态分派(dispatch)和引用计数,以及所有上百万次的处理每个元素并将其数据转换为原始C double的过程。每个元素碰巧都是一样的,但是array构造函数并不知道这一点。建立和清理百万元素列表也有开销。

第二行更简单。 Python可以对数组的内容进行memcpy一百万次。

关于python - 为什么创建一个小的数组然后扩展它,而不是完全从一个大列表中创建一个数组,效率更高?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53532929/

10-11 22:35
查看更多