簡體   English   中英

Python 傳遞列表作為參數發送所有列表數據或僅參考

[英]Python pass list as argument sends all of list data or just reference

我有以下代碼:

def test(a):
  a.append(3)

test_list = [1,2]
test(test_list)

在上面的代碼中,當我將 test_list 作為參數傳遞給測試 function 時,python 是發送整個列表對象/數據(這是一個大字節大小)還是只是對列表的引用(這會小得多,因為它只是一個指針)?

根據我通過查看 Python 的 pass by object 參考的理解,它只發送參考,但不知道如何驗證確實如此

它將別名傳遞給 function; 對於 function 的生命周期,或者直到 function 有意將a重新綁定到指向其他對象(使用a = something ),函數的a是綁定到調用者的test_list的同一個list的別名。

確認這一點的直接方法是:

  1. 調用后打印test_list 如果實際上復制了list ,則append中的 append 只會影響副本,調用者不會看到它。 test_list實際上會附加一個新元素,因此它與 function 中的list相同。
  2. 在function外打印id(test_list) ,在function內打印id id(a) id在任何給定時間點都必須是唯一的,因此兩個不同list可以具有相同 ID 的唯一方法是一個在另一個創建之前被銷毀; 由於test_list在 function 調用之前和之后繼續存在,如果a具有相同的id ,則它在定義上是相同的list

所有 function arguments 都在 Python 中通過引用傳遞。因此 function test中的a變量將引用與調用代碼中的 test_list 相同的test_list function 返回后, test_list將包含[1,2,3]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM