python中的[None]和[]有啥区别? [复制]

Posted

技术标签:

【中文标题】python中的[None]和[]有啥区别? [复制]【英文标题】:what is difference between [None] and [] in python? [duplicate]python中的[None]和[]有什么区别? [复制] 【发布时间】:2016-08-24 00:57:58 【问题描述】:

我认为 [None] 与 [] 相同,但在我的测试中,也许有一些东西......

>>>print len([])
0
>>>print len([None])
1

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

还有一个有趣的问题

>>>c= []
>>>d= []
>>>print c is d
False
>>>a= 1
>>>b=1
print a is b
True

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

【问题讨论】:

1. [] - 一个没有任何项目的列表。 [None] - 一个包含 None 对象的列表。 2.您需要使用== 而不是is 来检查相等性。使用is 来检查身份(对于像NoneTrueFalse 这样的单例对象) @falsetru:那些不要求提供更多信息或提出改进建议的人,因此不应该是 cmets。 is 检查两个变量是否指向同一个对象,而 == 检查变量引用的对象是否相等。见***.com/questions/132988/… ***.com/questions/13805882/… 【参考方案1】:

[] 是一个空列表

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

is 检查引用是否相等。如果两个对象都通过 reference 引用同一个对象,那么 is 将返回 true。

a = []
b = a
a is [] #false
a is b  #true

【讨论】:

【参考方案2】:

[None] 并不意味着列表中没有任何内容。 None is a keyword in python 有特殊含义。就像其他语言的NILNULL

当您说[None] 时,您是在说“我想要一个包含名为None 的特殊对象的列表”。这不同于说“我想要一个不包含任何元素的列表”(通过输入 [])。

【讨论】:

【参考方案3】:

问题一:

None 不是对象。它的类型为“NoneType”。 这可以通过在终端中执行以下操作来查看:

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

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

问题2:

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

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

【讨论】:

【参考方案4】:

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

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

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

>>> 1900 is 1900
True

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

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

例如在这个问题中解释了这种相当奇怪的行为:Why does Python handle '1 is 1**2' differently from '1000 is 10**3'?

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

>>> a == b
True
>>> 1900 == 1900
True

正如人们所期望的那样。

【讨论】:

【参考方案5】:

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

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

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

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

>>>print c is d
False

是预期的。

另一方面,

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

这里,a 和 b 是基元,而不是对象

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

所以,这是意料之中的:

print a is b
True

【讨论】:

在 Python 中使用原语实际上有一个技巧。由于 Python 中的一切都是对象,因此 int 也是。 1 is 1 会返回 true 的原因是 Python 出于性能原因缓存了小整数对象。试试 10000000 是 10000000 会返回 false。

以上是关于python中的[None]和[]有啥区别? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

“foo is None”和“foo == None”之间有啥区别吗?

NaN 和 None 有啥区别?

测试“nil”和“.None”的可选项有啥区别?

border:none与border:0px有啥区别?

隐藏属性 (HTML5) 和 display:none 规则 (CSS) 有啥区别?

java语言中error和exception有啥区别?final和finally有啥区别?