【发布时间】:2018-06-25 01:26:20
【问题描述】:
以下博客文章显示,如果列表没有随机打乱,则整数列表的处理速度会更快。由于缓存局部性,未洗牌列表的处理速度更快,因为它的相邻元素在内存中相邻。
https://rickystewart.wordpress.com/2013/09/03/why-sorting-an-array-makes-a-python-loop-faster/
我尝试了以下方法,以便将随机列表与内存中连续的相邻元素重新排序。
import copy
a = [i for i in range(1000000)]
shuffle(a)
# Approach 1
a = copy.deepcopy(a)
但是,这并没有提高性能,这表明项目没有在内存中连续重新排序。
shuffle后我也尝试了以下修改,同样没有提升性能。
# Approach 2
a = [x for x in a]
# Approach 3
a = [copy.deepcopy(x) for x in a]
以下方法提高了性能,表明元素在内存中重新排序。
# Approach 4
a = [x+0 for x in a]
我的问题是为什么方法 1 到 3 不重新排序内存中的元素,而方法 4 呢?
有没有建议的方法来做到这一点,不同于方法 4?
【问题讨论】:
标签: python integer copy deep-copy