2016-02-14 2 views
9

Noneは予約語です。メモリ内の正確な値はNoneです。私が頭に入れているのは、メモリ内のNoneの表現が0か、ヒープを指すポインタのどちらかです。しかし、メモリ内の空き領域を指すポインターは、ゼロ値も意味もしません。私は次のように試験したときので:メモリにNoneの値は何ですか? Pythonの

>>> None.__sizeof__() 
16 

それはNoneが16のバイトを消費し、それは単純に空の値のために実際にすぎだということが判明しました。

実際にNoneは何を表していますか?

+2

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

+0

「なし」は空の値を表しません。これは価値のないことを表すオブジェクトです。 – Alessiox

答えて

11

Noneは、(ほとんど)メソッドと属性を提供しないシングルトンオブジェクトであり、その唯一の目的は特定の操作に値がないということを示すことです。

実際のオブジェクトとしては、いくつかのヘッダー、リフレクション情報などが必要です。したがって、すべてのPythonオブジェクトが占める最小限のメモリが必要です。

4

NoneNoneTypeのいくつかのPythonオブジェクト、実際にはその種のインスタンスです。これは文字通り他のすべてのもののようなPythonオブジェクトなので、そのタイプのような追加のオブジェクト情報についても保存されているものだけではありません。

すべてのオブジェクトにこのオーバーヘッドがあります。そのため整数は例えば28のサイズから始まります。これを変更することはできません。Pythonとその型システムの実装の詳細です。

+0

それは私が考えていたものですが、私はこれについて言及するのを忘れました。 – direprobs

2

なしは、値またはnull値が存在しないことを表すPythonの特別な定数です。これは、独自のデータ型のオブジェクトで、NoneTypeです。複数のNoneオブジェクトは作成できませんが、変数に割り当てることができます。これらの変数はお互いに等しくなります。私たちは、どれも例えば偽、0または任意の空のリスト、辞書、文字列などを意味するものではありません特別な注意取る必要があります。

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

を何も返さないボイドの機能が自動的になしオブジェクトを返します。また、プログラムフローがreturn文に遭遇しない関数によっても返されません。たとえば、次のように

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) 

出力:この関数はreturn文を持つ None

が、それはすべての場合には達していません。この関数は、入力が偶数の場合にのみTrueを返します。したがって、関数に奇数を渡すと、暗黙的にNoneが返されます。

0

[なし]は16バイトを消費し、実際は単純に空の値に過ぎます。

なしは空の値ではありません。これは、Python Built-in constants Docと読むことができるように、値が存在しないことを表すNoneTypeオブジェクトです。変数にNoneを割り当てることはできますが、構文エラーが発生するため、Noneに割り当てることはできません。

関連する問題