关于列表:python中[None]和[]之间的区别是什么?

what is difference between [None] and [] in python?

本问题已经有最佳答案,请猛点这里访问。

我认为[没有]和[没有]是一样的,但在我的测试中,也许有什么…

1
2
3
4
>>>print len([])
0
>>>print len([None])
1

我什么时候应该使用"无"?和[]

还有一个有趣的问题

1
2
3
4
5
6
7
8
>>>c= []
>>>d= []
>>>print c is d
False
>>>a= 1
>>>b=1
print a is b
True

为什么空列表的ID授予不同?


[]是一个空列表

[None]是一个包含一个元素的列表。其中一个元素是None

is检查参考等式。如果两个对象都引用同一个对象,那么is将返回true。

1
2
3
4
a = []
b = a
a is [] #false
a is b  #true

None是一个有效的元素,但您可以将其视为存根或占位符。因此,即使只有一个None,它也算作列表中的一个元素。

对于(相等)比较,不应使用is。使用==

因为如果你不知道何时以及如何使用它,is会导致奇怪的行为。例如:

1
2
3
4
5
6
7
8
9
10
11
>>> 1900 is 1900
True

>>> a = 1900
>>> b = 1900
>>> a is b
False

>>> a, b = 1900, 1900
>>> a is b
True

例如,在这个问题中解释了这种相当奇怪的行为:为什么Python处理"1是1**2"与"1000是10**3"不同?

使用==时不会发生这种情况:

1
2
3
4
>>> a == b
True
>>> 1900 == 1900
True

正如人们所期望的。


问题1:

无是对象。它是"非类型"类型。这可以通过在终端中执行类似的操作看到:

1
2
>>> type(None)
<type 'NoneType'>

所以,当你把这个对象放在一个列表中时,这个列表有一个元素。

问题2:

python中的赋值操作符=用于将名称附加到对象。对于不可变对象(如整数),可以将多个名称附加到同一对象。这就是你对ab所做的。因此,当您使用is操作符测试它们的身份时,您会看到这两个名称指向相同的对象。

或者,当您将一个名称附加到一个新创建的列表(使用[]操作符创建的)时,它每次都是一个不同的列表。


[None]并不意味着清单中没有任何内容。None是python中的一个关键字,具有特殊的含义。在其他语言中,它类似于NILNULL

当你说[None]的时候,你是说"我想要一个列表,其中包含一个特殊的对象,叫做None"。这不同于"我想要一个不包含元素的列表"(通过键入[])。


你想用None来暗示没有有效的对象。您希望使用[]来表示一个类型为list且没有元素的对象。

[None]是一个元素为None的列表。

1
2
>>>c= []  # This is a new list object
>>>d= []  # This is another new list object

在python中,x is y用于检查xy是否是相同的对象。这里,cd指向不同的列表对象。所以,

1
2
>>>print c is d
False

是意料之中的事。

另一方面,

1
2
3
4
>>>c= []  # This is a new list object
>>>d = c  # This is the same object as c
>>>print c is d
True

这里,A和B是基本体,而不是对象

1
2
>>>a= 1
>>>b=1

因此,这是预期的:

1
2
print a is b
True