【发布时间】:2021-01-08 07:24:58
【问题描述】:
我认为索引列表会比额外的内存分配快得多。然而,下面的代码却产生了相当令人惊讶的结果。
import random, timeit
from scipy import stats
random.seed(42)
a = [random.randint(-10000, 10000) for _ in range(10000)]
def new_list(a):
b = []
for v in a:
b.append(v*2)
def in_place(a):
for i in range(len(a)):
a[i] *= 2
print(stats.describe(timeit.repeat("new_list(a_cp)", setup="a_cp = a.copy()",
number=100, globals=globals())))
print(stats.describe(timeit.repeat("in_place(a_cp)", setup="a_cp = a.copy()",
number=100, globals=globals())))
我得到的结果是
DescribeResult(nobs=5, minmax=(0.16783145900000007, 0.2041749690000001), mean=0.18718994520000004, variance=0.00018897353500515855, skewness=-0.23156148623021452, kurtosis=-1.0041025476826309)
DescribeResult(nobs=5, minmax=(0.25297652999999976, 0.2932831710000001), mean=0.2716082258, variance=0.00024360213447797058, skewness=0.2423908282124137, kurtosis=-1.136485780718656)
这是相当不同的,不是吗?尽管如果性能真的很重要,我宁愿使用numpy,但我找不到一个很好的理由说明分配新内存比通过指针传输更快。谁能帮帮我?
编辑:: 由于我的问题有点不清楚,所以我更改了标题并删除了一些句子。
【问题讨论】:
标签: python python-3.x loops