2016-08-04 96 views
2

我有類似下面的方法:切片列表(Python 3中)

def slice_list(my_list, slice_point): 
    my_list = my_list[:slice_point] 
    print("Inside method: ", my_list) 

    return 

我有一個測試爲它類似如下:

if __name__ == "__main__": 
    my_list = [1,2,3,4,5] 
    slice_point = 3 

    slice_list(my_list, slice_point) 
    print("Outside method: ", my_list) 

我得到的輸出是不我所預期的,在這個意義上,該清單沒有最終編輯

>>>Inside method: [1, 2, 3] 
>>>Outside method: [1, 2, 3, 4, 5] 

但是當我做一個append到列表中,我T還編輯列表爲好,如下例所示:

def append_to_list(my_list, element): 
    my_list.append(element) 
    print("Inside method: ", my_list) 

    return 

if __name__ == "__main__": 
    my_list = [1,2,3,4,5] 
    append_to_list(my_list, "new element") 
    print("Outside method: ", my_list) 

這給下面的輸出:

>>>Inside method: [1, 2, 3, 4, 5, 'new element'] 
>>>Outside method: [1, 2, 3, 4, 5, 'new element'] 

爲什麼切片不會改變列表爲好?

+3

您應該閱讀有關本地和全局變量。除非指定爲全局,否則在函數中創建或重新分配的任何變量均視爲本地變量。但追加不重新分配... – Julien

+0

另外,你的功能不是一種方法。 –

回答

3

試試這個:

my_list[:] = my_list[:slice_point] 

你的舊方法只是在一個新的對象,即在由切片返回的複製點名稱my_list

然而,我上面提出的建議修改了my_list最初指出的對象而不重新綁定該名稱。