[英]Beginner question about why a certain function does not change the value of the original list (Python)?
我一直在努力學習編碼,剛剛發現 python 在同一位置存儲設置為彼此相等的變量(例如 nums = nums_copy),所以如果你改變一個,你就改變另一個(如果我'我錯了)。
所以我看到了這個 function 的例子,想知道為什么它不改變原來的列表?
def delete_starting_evens(lst):
while (len(lst) > 0 and lst[0] % 2 == 0):
lst = lst[1:]
return lst
my_list = [4, 8, 10]
print(delete_starting_evens(my_list), my_list)
output:
[] [4, 8, 10]
您永遠不會對原始列表進行操作。 在每次循環迭代中,您創建一個從前一個值派生的新列表 ( lst[1:]
),然后將其分配給您的局部變量lst
。
如果要更改原始列表,請使用列表更改方法,例如
lst.pop()
我認為您正在打印 2 個變量,第一個是您的 function 的返回,然后 my_list 是 [4, 8, 10]
lst
是局部變量。 當您分配給它時,您只需更改變量所指的內容; 它對先前綁定到名稱的參數沒有影響。
如果要刪除所有前導偶數,可以使用del
:
def delete_starting_evens(lst):
while lst and lst[0] % 2 == 0:
del lst[0]
您不需要返回列表,因為lst
和my_list
都引用同一個列表,因此通過lst
所做的任何更改也可以從my_list
中看到。
正如有些用戶所說的需要直接對列表進行操作而不是賦值,也可以使用關鍵字is
來檢查兩個變量是否具有相同的id:
def delete_starting_evens(lst):
while len(lst) > 0 and not lst[0] % 2:
lst.pop(0)
return lst
my_list = [4, 8, 10]
print(delete_starting_evens(my_list) is my_list)
輸出
True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.