我被告知map()非常快(https://www.python.org/doc/essays/list2str/),所以我尝试使用它来复制列表列表,而不关心可变性,我在每个子列表上调用了元组,如下所示:
sheet = [['a','a','a'],
['a','a','a'],
['a','a','a'],
['a','a','a'],
['a','a','a']]
newsheet1 = map(tuple,sheet)
但发现地图对象维护对原始工作表子列表元素的引用,通过更改工作表中的值可以证明,更改将反映在地图对象中:
sheet[0][0] = 'CHANGED'
for r in newsheet1:
print (r)
打印:
('CHANGED', 'a', 'a')
('a', 'a', 'a')
('a', 'a', 'a')
('a', 'a', 'a')
('a', 'a', 'a')
所以我尝试用列表理解来制作副本:
newsheet2 = [tuple(row) for row in sheet]
sheet[0][0] = 'CHANGED'
print (newsheet2[0])
打印:
('a', 'a', 'a')
因此列表推导不保留原始元素引用,但是它比使用map()要慢得多吗?并且有没有什么方法可以使用map()而不维护引用,如果它更快?
我想我的问题归结为复制列表列表的最快方法