求解释一下 Python 里的 None 到底代表什么?? 我简单的测试了一下,求解释…… - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dddd
V2EX    Python

求解释一下 Python 里的 None 到底代表什么?? 我简单的测试了一下,求解释……

  •  
  •   dddd 2014 年 5 月 23 日 5209 次点击
    这是一个创建于 4342 天前的主题,其中的信息可能已经有所发展或是发生改变。
    >>> b = list()
    >>> print(b is None)
    False
    >>> b = []
    >>> print(b is None)
    False
    >>> print(b == [])
    True
    >>> b = list()
    >>> print(b == [])
    True
    >>> print(b == None)
    False
    18 条回复    2014-05-23 19:17:39 +08:00
    woshifyz
        1
    woshifyz  
       2014 年 5 月 23 日
    list() == []
    [] != None
    jiang42
        2
    jiang42  
       2014 年 5 月 23 日
    我是理解成 C 里面的 null 指针的
    manfay
        3
    manfay  
       2014 年 5 月 23 日
    这个问题更加像是 == 与 is 的区别吧。
    在Python里,== 是值相等,is是对象相等,对象相当于一个内存区块。所以如果两者在内存里储存在不同的地方,is的测试结果就为False。
    (我只是初学者,有可能理解得不对……)
    sandtears
        4
    sandtears  
       2014 年 5 月 23 日   1
    None 就代表一个什么都没有的东西,类型是 NoneType, 而 "[]" 代表一个空的列表,它的类型是 list
    VYSE
        5
    VYSE  
       2014 年 5 月 23 日
    b = list()
    print id(b)

    print id([])
    print id(None)
    你就知道了is是干啥的了

    print id(1)
    print id(1.0)
    所以1 is not 1.0
    但1==1.0
    minbaby
        6
    minbaby  
       2014 年 5 月 23 日
    print type([])
    print type(None)
    manfay
        7
    manfay  
       2014 年 5 月 23 日
    @sandtears 即使类型相同,两个空列表的is测试也可能为False。

    a = list()
    b = list()
    print(a is b)

    结果为False
    tongle
        8
    tongle  
       2014 年 5 月 23 日
    None is just None
    type(None)
    <type 'NoneType'>
    walleL
        9
    walleL  
       2014 年 5 月 23 日   1
    None 是一个特殊 Python 对象, 在 Python 解释器启动时自动创建, 解释器退出时销毁
    在一个解释器进程中只有一个 None 存在, 因为不可能有其他对象会使用 None 已占用的内存(它就是占了个坑)
    所以只有: None is None and NOne== None
    tonghuashuai
        10
    tonghuashuai  
       2014 年 5 月 23 日   2
    用指针来说
    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,自然 a b c d != None

    一图胜千言

    dorentus
        11
    dorentus  
       2014 年 5 月 23 日 via iPhone
    不考虑实现细节,只看隐喻的话,None 顾名思义就是没有;为啥会觉得空列表和没有/不存在是等价的?
    hitsmaxft
        12
    hitsmaxft  
       2014 年 5 月 23 日
    nobody => None

    One=> Interger(1)

    EmptyList => List()

    isFalse => False(1)

    isTrue => True(1)

    所以他们不等
    sandtears
        13
    sandtears  
       2014 年 5 月 23 日
    @manfay "is" 并非比较值,而是比较是否为同一个对象。。

    就像你有两个水杯,一个水杯 A 一个水杯 B,两个里面都是空的。

    你可以说这两个水杯相等(也就是 "=="),但不能说他们是同一个水杯(也就是 "is")
    zog
        14
    zog  
       2014 年 5 月 23 日
    @manfay id(a),id(b),你会发现他们指向对象不是同一个,所以is会False
    zog
        15
    zog  
       2014 年 5 月 23 日
    is为true时候是他们id同样,公用同一指针~
    zog
        16
    zog  
       2014 年 5 月 23 日
    推荐阅读: https://docs.python.org/3.3/reference/datamodel.html 仔细阅读一下数据模型。搞清楚引用,对象,对象值之间的关系,搞清楚引用赋值,浅拷贝,深拷贝,这三者的差异。
    yakczh
        17
    yakczh  
       2014 年 5 月 23 日
    None相当于js的undefined
    jsonline
        18
    jsonline  
       2014 年 5 月 23 日 via Android
    is 和 equal 是不同的,亲
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5212 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:16 PVG 09:16 LAX 18:16 JFK 21:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86