2015-12-03 53 views
0

以下是我的測試代碼。Python列表的引用不會在函數中改變

試驗1

def set(object): 
    object = [2,3] 
a = [1,3] 
set(a) 
print a 

輸出[1,3]

試驗2

def set(object): 
    object[0] = 2 
a = [1,3] 
set(a) 
print a 

輸出是[2,3 ]

對於測試2,我可以很好地知道它,因爲a是一個列表,它在python中傳遞引用。所以當致電set(object),objecta的參考。因此a更改爲[2,3]。 但是對於測試1,我還不太清楚。我認爲答案是[2,3],但真正的答案是[1,3]。誰能告訴我這兩個測試案例的區別?

回答

0

在第二個測試案例中,您嘗試對現有列表進行變異,以便能夠工作。

但是,在你的第一個測試,你想分配可變a一個新的列表,但你正在做這裏面的功能範圍,而應返回objecta接受它。

>>> def set_value(a): 
...  a=[2,3] 
...  return a 
... 
>>> a=[1,3] 
>>> a = set_value(a) 
>>> a 
[2, 3] 
+0

我建議不要叫它'set',即使這是OP所使用的名稱。 – TigerhawkT3

+0

其實我只是遵循OP的命名,我知道它可以與set()衝突。更新。 –