【问题标题】: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 检查两个变量是否指向同一个对象,而 == 检查变量引用的对象是否相等。见stackoverflow.com/questions/132988/…

标签: python list


【解决方案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。
          猜你喜欢
          • 2018-06-06
          • 2022-12-18
          • 1970-01-01
          • 2014-02-23
          • 1970-01-01
          • 2023-03-17
          • 2015-05-18
          相关资源
          最近更新 更多