我需要一个函数,将重置列表到其原始状态,所以为了做到这一点,我将使用一个列表的副本作为最直接的方式来实现它
每次我对列表(或列表数量)进行更改时,我都希望列表处于原始状态。由于列表的数量可能会更大,我需要一个函数,可以处理它,而无需重绘几行代码每次
我试着做一个函数,简单地创建一个列表的副本,这样我就可以用它来获得一个原始列表的副本,以便进一步修改。 但有一点我遗漏了,因为我得到了错误:
list1=[1,2,3]
list2=['a','b','c']
list3=[434,52,43]
def copy_lists():
list1c=list1[:]
list2c=list2[:]
list3c=list3[:]
copy_lists()
list1c.append('b')
copy_lists()
#now list1c should be back to orginal
print(list1c)
---------------------------------------------------------------------------
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-95468ead1e78> in <module>()
9
10 copy_lists()
---> 11 list1c.append('b')
12 copy_lists()
NameError: name 'list1c' is not defined
在python中,在复制对象时必须非常小心。如果执行
list1c = list1
和list1c.append('a')
,list1还将附加“a”Here是一篇讨论变量何时是指针,何时是另一个变量数据的实际副本的文章确保修改对象副本不会更改原始副本的最佳方法是使用copy模块中的deepcopy function
您现在遇到的错误是一个范围问题。当您试图在
copy_lists()
函数之外使用list1c时,您试图访问其作用域之外的局部变量(在本例中是copy\u lists函数)Here is some reading about scoping in python.如果您想在函数中进行复制,可以从copy\u lists()函数返回一个元组
相关问题 更多 >
编程相关推荐