2015-05-20 22 views
3

我知道數值在python中是不可變的。我也讀過了python中的所有東西。我只想知道數字類型是否也是python中的對象。因爲如果它們是對象,那麼這些變量實際上是引用變量的對嗎?這是否意味着如果我將一個數字傳遞給一個函數並在函數中對其進行修改,那麼會創建兩個帶有兩個引用的數字對象? python中有一個基本數據類型的概念嗎?數字是否被視爲python中的對象?

注:我也一直認爲它是對象。但是在Python導師可視化不同的充說: http://www.pythontutor.com/visualize.html#mode=edit

def test(a): 
    a+=10 
b=100 
test(b) 

或者是它的可視化工具的缺陷?

回答

7

是否是數字類型的對象?

>>> isinstance(1, object) 
True 

顯然他們是。 :-)。

請注意,你可能需要調整你的心理模型object一點點。在我看來,你認爲object是「可變的」 - 事實並非如此。實際上,我們需要將python名稱視爲對象的引用。該對象可能持有對其他對象的引用。

name = something 

這裏,右手側被評估 - 所有的名稱解析成對象和表達式(對象)的結果是由「名稱」被引用。

好的,現在讓我們考慮一下當你將某些東西傳遞給一個函數時會發生什麼。

def foo(x): 
    x = 2 

z = 3 
foo(z) 
print(z) 

我們期望在這裏發生什麼?那麼,首先我們創建函數foo。接下來,我們創建對象3並通過名稱z來引用它。之後,我們查找z參考的值,並將該值傳遞給foo。輸入foo後,該值將以(本地)名稱x引用。然後,我們創建對象2並通過本地名稱x來引用它。請注意,x與全球無關z - 它們是獨立的參考文獻。僅僅因爲他們在輸入函數時引用同一個對象並不意味着他們必須始終引用該函數。我們可以通過使用賦值語句來更改名稱在任何時候引用的內容。

注意,與+ =您的例子似乎使事情變得複雜,但如果它有助於在這種情況下,你能想到的爲a = a + 10。欲瞭解更多關於+ =退房的信息:When is "i += x" different from "i = i + x" in Python?

+0

問題的第二部分呢? – farhawa

+0

@WajdiFarhani - 對不起,也許有點太急於發佈。我已經詳細闡述了涵蓋完整答案的希望。 – mgilson

+0

@mgilson感謝您的鏈接!在附註上,你能告訴我爲什麼可視化不同嗎?爲什麼這些數字沒有被表示爲對象? – codingsplash

3

在Python中的所有東西是一個對象,包括數字。沒有「原始」類型,只有內置類型。

但是,數字是不可變的。當您使用數字執行操作時,您正在創建一個新的數字對象。

相關問題