为什么允许列表追加自身?

时间:2019-11-13 18:54:48

标签: python list recursion

我偶然发现在Python中您可以编写如下内容:


l = list()
for i in range(5):
  l.append(l)

如果我打印出l是什么样的话,

[[...], [...], [...], [...], [...]]

现在我可以做类似的事情了

l[0][0][0][0]...[0]

这将返回完全相同的列表。

我的短毛绒未发现我在代码中犯的错误,因此可能很难发现。所以我的问题是:为什么允许列表追加自身?您能做什么用?

如果没有用,则应禁止使用。

3 个答案:

答案 0 :(得分:2)

您不允许在列表中使用列表的标准是它没有用。但是很难证明这是不正确的。也许没有人知道的用途,但这并不是将来有人会使用的。同时,在解释将对象添加到列表中存在哪些异常以及实现这些异常方面,这两种语言均增加了成本。

如果您可以证明允许向其自身添加列表是有害,那么对这种语言进行更改的理由就更强了。但是“我不小心键入了错误的变量名”并不是一个有力的论点。

答案 1 :(得分:1)

为什么允许列表附加到自身?请记住,在python中,所有内容都是参考。列表只是对对象的引用序列。由于列表是对象,因此可以被另一个列表引用。当列表引用一个对象时,它实际上不像该对象现在包含在列表中,它只是序列中的单个元素现在是对该对象的引用。尽管循环引用有时很糟糕,但有时还是有用的,实际上这里没有任何破坏。请记住,包含自身的列表实际上只是一个引用自身的列表。

答案 2 :(得分:-1)

为什么允许列表追加自身?

您认为这是一个错误并且不应该被允许的假设是不正确的。作为工程师,由我们决定是否适合我们遇到的情况。我将解决这个问题,为什么您认为不应这样做?

您可以用它做什么?

将数组添加到数组实际上是很常见的。我可以想象这样一种情况,您必须从5个相同的数组开始,对每个数组执行不同的计算,然后比较结果。这将是实现这一目标的一种方式。