2015-10-31 53 views
0

我大概可以运行实验来测量这个自己,但我希望有人能提供详细的答案。额外的数据是否会降低Python对象的性能?

假设我有两个Python数组:

small_array = [{"x": i, "foo": "hamburger"} for i in range(0,10000)] 
big_array = [{"x": i, "foo": "hamburger", "bar": "hotdog"} for i in range(0,10000)] 

我的问题是:将只涉及的“X”参数基本阵列操作(例如迭代或通过索引访问)被用于small_array更快相比big_array

我在问,因为我经常发现自己构建了一个复杂的数据结构X,我将在其上执行昂贵的操作A和B,使得A和B所使用的X的属性之间的重叠很小。所以我想知道是否有将X分解为Y和Z的性能优势,以便A可以在Y上操作,B可以在Z上操作。

+1

通过“数组”,你是指外部列表还是内部字典?由于字典访问被散列成桶,它大多只会减缓碰撞。我怀疑,添加一打项目可能没有什么区别。 – tdelaney

+0

迭代是时间复杂度O(n),即可预测地随着列表的长度而增长。按索引访问是O(1),即它不应该关系到列表的长度。 – wim

回答

0

合理大小(1000个或更少的项目)字符的性能差异在统计学上是不显着的。可能会有一些退化的情况,其中许多键散列为相同的值,但在现代版本的Python中发现的散列随机化将其扫描在地毯下。

至于列表本身,每个元素只是对另一个对象的引用,所以底层对象的大小不会影响列表操作。

0

迭代和索引编制速度对于每个列表(对于未来的谷歌搜索,它们是列表,而不是数组)。

相关问题