我试图编写一个函数,对列表的每个成员执行迭代操作input
,然后删除该成员。尽管这对于我在下面粘贴的最简代码没有意义,但我希望函数通过检查其操作的结果与原始的input
列表来结束-因此,函数的第一步创建一个列表originals = input
,该列表旨在保留此起始列表,以便在最后进行检查
以下是我函数的最简版本:
def process(input):
originals = tuple(input)
members = []
print('Step 0\nOriginals: {}\nList: {}\nMembers: {}'.format(originals,input,members))
step = 0
while len(input)>0:
step += 1
members.append(input[0])
input.remove(input[0])
print('\nStep {}\nOriginals: {}\nList: {}\nMembers: {}'.format(step,originals,input,members))
可以看到,我在开始时创建了originals
,然后在剩下的时间里不碰它。然而,当我调用process(['a','b','c'])
时,输出是:
Step 0
Originals: ['a', 'b', 'c']
List: ['a', 'b', 'c']
Members: []
Step 1
Originals: ['b', 'c']
List: ['b', 'c']
Members: ['a']
Step 2
Originals: ['c']
List: ['c']
Members: ['a', 'b']
Step 3
Originals: []
List: []
Members: ['a', 'b', 'c']
如预期的那样,该函数将input
的每个元素依次移动到新列表member
,但同时将它们从originals
中删除。大概这反映了当我进行初始originals = input
赋值时,列表之间建立的某种联系
如果我使用originals = tuple(input)
,一切都会正常工作。所以我可以继续我的工作,但我不满意。为什么originals
会经历我对input
执行的操作,有没有比将其复制到元组更好的方法呢
提前为我的新观点道歉,我试图通过谷歌回答这个问题,但我不确定我问的问题是否正确
列表是可变的。创建对列表的新引用时,并不是在创建新列表。创建列表的元组可以满足您的需要,因为元组是不可变的,所以您不会创建新的引用。另一种方法是使用list的copy()方法或slice[:]
相关问题 更多 >
编程相关推荐