[英]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
的別名。
確認這一點的直接方法是:
test_list
; 如果實際上復制了list
,則append
中的 append 只會影響副本,調用者不會看到它。 test_list
實際上會附加一個新元素,因此它與 function 中的list
相同。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.