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
来检查身份(对于像None
、True
、False
这样的单例对象)
@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 有特殊含义。就像其他语言的NIL
或NULL
。
当您说[None]
时,您是在说“我想要一个包含名为None
的特殊对象的列表”。这不同于说“我想要一个不包含任何元素的列表”(通过输入 []
)。
【讨论】:
【参考方案3】:问题一:
None 不是对象。它的类型为“NoneType”。 这可以通过在终端中执行以下操作来查看:
>>> type(None)
<type 'NoneType'>
所以,当你把这个对象放在一个列表中时,这个列表只有一个元素。
问题2:
Python 中的赋值运算符=
用于将名称附加到对象。对于不可变对象(如整数),可以将多个名称附加到同一个对象。这就是您对a
和b
所做的事情。因此,当您使用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
用于检查 x
和 y
是否是同一个对象。
这里,c
和d
指向不同的列表对象。
所以,
>>>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”之间有啥区别吗?