2016-02-14 23 views
9

None在Python中是一個保留字,只是一個問題讓我想起了內存中None的確切值。我記住的是,None在內存中的表示是0或指向堆的指針。但指針指向內存中的空白區域既不會導致零值。因爲當我測試了以下:內存中None的值是多少?

>>> None.__sizeof__() 
16 

事實證明,None佔用16個字節,這其實太多隻是一個空值。

那麼None在內存中究竟代表什麼?

+2

http://stackoverflow.com/questions/19473185/what-is-a-none-value –

+0

'None'不代表一個空值。這是代表價值缺失的對象。 – Alessiox

回答

11

None是單獨的對象,其不提供(幾乎)無方法和屬性以及其唯一目的是表示一個事實,即,對某些特定的操作沒有任何價值。

作爲一個真正的對象,它仍然需要一些頭文件,一些反射信息和類似的東西,所以它需要每個python對象佔用的最小內存。

4

None引用了一些NoneType的Python對象,實際上是其唯一的實例。既然它是一個Python對象,就像所有其他事物一樣,它不僅僅是存儲關於其類型的附加對象信息的原始內容。

每個對象都有這個開銷;這就是爲什麼整數以28的大小開始的原因。你不能改變它,它是Python及其類型系統的實現細節。

+0

這就是我正在考慮的內容,但我忘了提及這一點。 – direprobs

2

無是Python中的一個特殊常量,表示沒有值或空值。它是它自己的數據類型NoneType的一個對象。我們不能創建多個None對象,但可以將其分配給變量。這些變量將彼此相等。我們必須特別小心,不併不意味着假,0或空列表,字典,字符串,等等。例如:不返回任何東西會自動返回一個無對象

>>> None == 0 
False 
>>> None == [] 
False 
>>> None == False 
False 
>>> x = None 
>>> y = None 
>>> x == y 
True 

太虛功能。程序流程沒有遇到返回語句的函數也返回無。例如:

def a_void_function(): 
    a = 1 
    b = 2 
    c = a + b 

x = a_void_function() 
print(x) 

輸出: None

這個程序有不返回值,雖然它裏面的一些操作的功能。所以當我們打印x時,我們會得到None,它會自動返回(隱式地)。同樣的,這裏是另一個例子:

def improper_return_function(a): 
    if (a % 2) == 0: 
     return True 

x = improper_return_function(3) 
print(x) 

輸出: None

雖然這個功能有一個return語句,它不是在任何情況下達成。只有當輸入均勻時,該函數纔會返回True。所以,如果我們給這個函數一個奇數,None就會隱式返回。

0

事實證明,None消耗16個字節,實際上這對於一個空值是太多了。

沒有不是一個空值。這是一個NoneType對象,它表示沒有值,因爲您可以在這裏閱讀:Python Built-in constants Doc。您可以將None分配給變量,但不能將其分配給無,因爲這會引發語法錯誤。