Python map()列表列表维护对子列表元素的引用

时间:2017-05-27 16:02:46

标签: python list dictionary

我被告知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()而不维护引用,如果它更快?

我想我的问题归结为复制列表列表的最快方法

0 个答案:

没有答案