1
woshifyz 2014-05-23 12:00:43 +08:00
list() == []
[] != None |
2
jiang42 2014-05-23 12:04:38 +08:00
我是理解成 C 里面的 null 指针的
|
3
manfay 2014-05-23 12:05:47 +08:00
这个问题更加像是 == 与 is 的区别吧。
在Python里,== 是值相等,is是对象相等,对象相当于一个内存区块。所以如果两者在内存里储存在不同的地方,is的测试结果就为False。 (我只是初学者,有可能理解得不对……) |
4
sandtears 2014-05-23 13:38:24 +08:00 1
None 就代表一个什么都没有的东西,类型是 NoneType, 而 "[]" 代表一个空的列表,它的类型是 list
|
5
VYSE 2014-05-23 14:20:51 +08:00
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 |
6
minbaby 2014-05-23 14:43:02 +08:00
print type([])
print type(None) |
7
manfay 2014-05-23 14:53:39 +08:00
|
8
tongle 2014-05-23 15:49:57 +08:00
None is just None
type(None) <type 'NoneType'> |
9
walleL 2014-05-23 16:36:51 +08:00 1
None 是一个特殊 Python 对象, 在 Python 解释器启动时自动创建, 解释器退出时销毁
在一个解释器进程中只有一个 None 存在, 因为不可能有其他对象会使用 None 已占用的内存(它就是占了个坑) 所以只有: None is None and None == None |
10
tonghuashuai 2014-05-23 17:29:39 +08:00 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 一图胜千言 |
11
dorentus 2014-05-23 17:41:32 +08:00 via iPhone
不考虑实现细节,只看隐喻的话,None 顾名思义就是没有;为啥会觉得空列表和没有/不存在是等价的?
|
12
hitsmaxft 2014-05-23 18:00:59 +08:00
nobody => None
One => Interger(1) EmptyList => List() isFalse => False(1) isTrue => True(1) 所以他们不等 |
13
sandtears 2014-05-23 18:50:56 +08:00
@manfay "is" 并非比较值,而是比较是否为同一个对象。。
就像你有两个水杯,一个水杯 A 一个水杯 B,两个里面都是空的。 你可以说这两个水杯相等(也就是 "=="),但不能说他们是同一个水杯(也就是 "is") |
15
zog 2014-05-23 19:03:52 +08:00
is为true时候是他们id同样,公用同一指针~
|
16
zog 2014-05-23 19:06:07 +08:00
推荐阅读: https://docs.python.org/3.3/reference/datamodel.html 仔细阅读一下数据模型。搞清楚引用,对象,对象值之间的关系,搞清楚引用赋值,浅拷贝,深拷贝,这三者的差异。
|
17
yakczh 2014-05-23 19:09:09 +08:00
None相当于js的undefined
|
18
jsonline 2014-05-23 19:17:39 +08:00 via Android
is 和 equal 是不同的,亲
|