所以,我有一个这个功能:
def Undo_Action(expenses_list ,expenses_lists_que,current_position):
'''
Undo the last performed action
Input:expenses_list - The current list of expenses
expenses_lists_que - The list containing the instances of last lists
current_possition- The posion in the que where our current expenses_list is
'''
if len(expenses_lists_que)>0:
expenses_list=deepcopy(expenses_lists_que[current_position-1])
current_position=current_position-1
else:
print("You din not performed any actions yet!")
print ("Label 1:" ,expenses_list)
return current_position
我在这个函数中调用它
def Execute_Main_Menu_Action( expenses_list, action, expenses_lists_que,current_position):
'''
Executes a selected option from the main menu
Input: The expenses list on which the action will be performed
The action which should be exectued
Output: The expenses list with the modifications performed
'''
if action == 1 :
Add_Expense(expenses_list)
elif action== 5:
Show_Expenses_List(expenses_list)
elif action== 2:
Remove_Expense_Menu( expenses_list)
elif action== 3:
Edit_Expense_Menu(expenses_list)
elif action==4:
Obtain_Data_Menu (expenses_list)
elif action==6:
current_position=Undo_Action(expenses_list ,expenses_lists_que,current_position)
print("Label 2:" , expenses_list)
return current_position
当函数Undo_Action结束时,为什么列表expense_list会丢失它的值。我的意思是当我在Label 1上打印expense_list时,会执行修改,但是当函数退出时,修改不会保留在标签2中,我有一个不同的列表。
答案 0 :(得分:3)
这是因为expenses_list
中的Undo_Action
现在指的是expenses_list=deepcopy(expenses_lists_que[current_position-1])
之后的另一个列表。
您需要做的是将该行更改为expenses_list[:]=deepcopy(expenses_lists_que[current_position-1])
。在这种情况下,expenses_list
将被修改,而不是引用另一个列表。
因此,如果在函数内部写expenses_list = [1,2]
,它将不会影响外部expenses_list
,因为函数中的expenses_list
现在引用另一个对象(列表)。但是,如果您撰写expenses_list[:] = [1,2]
或expenses_list[0], expenses_list[1] = 1, 2
,您的外部expenses_list
将会被更改。