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

2024-09-28 05:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

有人告诉我map()非常快(https://www.python.org/doc/essays/list2str/),所以我尝试用它来复制列表列表,而不考虑易变性,我对每个子列表调用tuple,如下所示:

sheet = [['a','a','a'],
         ['a','a','a'],
         ['a','a','a'],
         ['a','a','a'],
         ['a','a','a']]

newsheet1 = map(tuple,sheet)

但发现map对象保留了对原始图纸子列表元素的引用(可通过更改图纸中的值来证明),更改将反映在map对象中:

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()而不维护引用?你知道吗

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


Tags: 对象in元素map列表forsheetrow

热门问题