为了账号安全,请及时绑定邮箱和手机立即绑定

为什么创建一个小数组,然后扩展它,而不是完全从一个大列表创建一个数组更有效?

为什么创建一个小数组,然后扩展它,而不是完全从一个大列表创建一个数组更有效?

慕尼黑5688855 2021-09-01 14:41:57
在一本书中找到以下代码,但无法获得完整的解释。x = array('d', [0] * 1000000) x = array('d', [0]) * 1000000第一种情况下的 python 代码创建一个长度为 1000000 的数组,而在第二部分中创建一个单一大小的数组并将大小乘以相同的因子。第二种情况的代码比第一种情况快 100 倍。速度差异的确切原因是什么?数组的python实现如何发挥作用?
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

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

第一行需要单独处理 中的每个对象[0] * 1000000,跟踪指针并执行类型检查、动态分派和引用计数以及处理每个元素并将其数据转换为原始 C double 的一百万次。每个元素碰巧都是相同的,但array构造函数不知道这一点。还有构建和清理百万元素列表的费用。

第二行就简单多了。Python 可以只memcpy处理数组的内容一百万次。


查看完整回答
反对 回复 2021-09-01
  • 1 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信