2015-06-23 43 views
0

詳細,我的問題是這樣的: 考慮下面的代碼,是否通過引用傳遞Python參數?

x = 10 
def func(x): 
    x = x+1 

def main(): 
    print(x) 
    func(x) 
    print(x) 

if __name__ == '__main__': 
    main() 

在運行此我得到:

10 
10 

這是否意味着Python不通過引用傳遞值?

而且我確實檢查了其他類型的問題,並且大多數(如果不是全部的話)包括列表或其他類似示例的類比。 是否可以用簡單的術語來解釋這個問題,就像一個簡單的整數?

Ps。我是編碼的初學者。

感謝

+1

請參閱http://www.python-course.eu/passing_arguments.php上的ref_demo(x)示例。 – jarmod

+0

http://stackoverflow.com/a/8140747/208880是一個很好的答案。 –

+0

非常感謝! @EthanFurman我之前閱讀過你的鏈接,但在閱讀下面的答案之後,它更有意義。 – Rudra

回答

3

如果從背景,如C或C++,我做到了過來,直到你看着辦吧這可能是鬱悶。

Python有名稱而不是變量,名稱綁定到對象。實際上,您可以將所有'變量'或名稱視爲指向python對象的指針。

在python中,整數,浮點數和字符串是不可變的。所以,當你做到以下幾點:

x = 10 
x = x + 1 

你是第一個結合名稱x到整數10,那麼當你評估x + 1你得到一個新的對象11,然後綁定x到該對象。函數體內部的x對於該函數是局部的,並且在將它綁定到11時,全局x仍然綁定到10

如果您要將list傳遞給該函數,並將某些內容附加到列表中,那麼該列表將被修改。 Python中的list是一個可變對象。所有綁定到列表的名稱都會引用修改後的列表。

因此,當你傳遞可變對象時,它可能看起來好像你是通過引用傳遞的,當你傳遞不可變對象時,它可能看起來像你傳遞的值。

相關問題