首頁 >後端開發 >Python教學 >為什麼在 Python 中將新列表指派給函數參數不會修改原始列表?

為什麼在 Python 中將新列表指派給函數參數不會修改原始列表?

Linda Hamilton
Linda Hamilton原創
2024-11-01 11:42:021091瀏覽

Why Does Assigning a New List to a Function Argument Not Modify the Original List in Python?

在函數範圍內更改列表

在 Python 中,當函數接收列表作為參數時,該參數實際上成為指向原始列表位置的引用記憶中。函數內對清單所做的任何修改都會直接反映在呼叫清單中。

但是,以下程式碼示範了挑戰這種理解的特殊行為:

<code class="python">def function1(list_arg):
   a = function2()  # function2 returns an array of numbers
   list_arg = list(a)

list1 = [0] * 5
function1(list1)
print(list1)
# [0, 0, 0, 0, 0]</code>

在此範例中,我們打算讓function1 修改list1,用陣列a 中的元素取代它的元素。但結果顯示list1沒有變化。為什麼會發生這種情況?

揭示重新分配陷阱

問題是由於錯誤的假設而產生的,即為 function1 中的 list_arg 變數分配新值會修改原始列表。實際上,此賦值僅更改 list_arg 的參考以指向記憶體中的不同物件。呼叫程式碼引用的原始列表保持不變。

實現所需的修改

要成功更改 function1 中的原始列表,我們需要修改其各個元素。這可以透過切片賦值來完成:

<code class="python">list_arg[:] = list(a)</code>

切片賦值將 list_arg 中的整個元素範圍替換為 list(a) 中的值。實際上,此操作直接修改了原始清單。

注意事項

雖然切片分配提供了一種方便的解決方案,但重要的是要注意它潛在的混亂。透過就地修改列表,程式碼會變得不太透明,並且更容易受到維護它的其他開發人員的誤解。考慮替代方法,例如從函數傳回新的修改列表,以增強程式碼的清晰度和可讀性。

以上是為什麼在 Python 中將新列表指派給函數參數不會修改原始列表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn