【问题标题】:Why does appending a list by itself create an infinite list为什么单独添加列表会创建一个无限列表
【发布时间】:2015-03-29 10:15:33
【问题描述】:
l = [1, 2]
l.append(l)
>>>l
[1, 2, [...]] #l is an infinite list

为什么这会创建一个无限列表而不是创建:

l = [1, 2]
l.append(l)
>>>l
[1, 2, [1, 2]]

【问题讨论】:

标签: python list recursion


【解决方案1】:

很简单,因为每个对象都会在第三个元素中引用自身。要实现[1, 2, [1, 2]]然后使用列表的副本。

l.append(l[:])

【讨论】:

    【解决方案2】:

    当你这样做时:

    l.append(l)
    

    列表l引用被附加到列表l

    >>> l = [1, 2]
    >>> l.append(l)
    >>> l is l[2]
    True
    >>>
    

    换句话说,您将列表放入其中。这将创建一个无限的引用循环,由[...] 表示。


    要做你想做的事,你需要附加一个列表l副本

    >>> l = [1, 2]
    >>> l.append(l[:])  # Could also do 'l.append(list(l))' or 'l.append(l.copy())'
    >>> l
    [1, 2, [1, 2]]
    >>> l is l[2]
    False
    >>>
    

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多