原文: https://www.cnblogs.com/mika-blogs/p/10981239.html
--------------------------------
與C不同,在python中是沒有NULL,但存在相近意義的None。
None表示空值,它是一個特殊 Python 對象, None的類型是NoneType
>>> type(None) <class 'NoneType'>
None在 Python 解釋器啟動時自動創建, 解釋器退出時銷毀。
在一個解釋器進程中只有一個 None 存在, 因為不可能有其他對象會使用 None 已占用的內存(它就是占了個坑)
所以只有: None is None and None == None
- None不支持任何運算也沒有任何內建方法
- None和任何其他的數據類型比較永遠返回False
- None有自己的數據類型NoneType,不能創建其他NoneType對象(它只有一個值None)
- None與0、空列表、空字符串不一樣
>>> None == 0 False >>> None == ' ' False >>> None == None True >>> None == False False
- 可以將None賦值給任何變量,也可以給None值變量賦值
- None是沒有像len,size等屬性的,要判斷一個變量是否為None,直接使用
if a is None: pass
結合is和== 說明None和空列表、空字符串的區別
用指針來說
is: 指向同一內存地址
==: 指向的內存地址中的內容是相同的
a = list() b = [] print a == b # True print a is b # False c = "abc" d = "abc" print c == d # True 字符串池 print c is d # True
此時為 list() 和 [] 相當於各自分配了一次內存,所以 a is not b,但是 各自分配的內存中的內容是一樣的,故而 a == b。
c 和 d 指向同一個內存地址(字符串池、引用計數機等機制)所以 c is d,c 和 d 指向的內存中存的內容也是相同的("abc"),所以 c == d。
而 None,可以認為是內存中不同於其他的一塊內存空間,a b c d 都有各自的指向,所以不是指向 None,故而 a b c d is not None,且None是唯一的,自然 a b c d != None