在Python中检测递归嵌套列表

时间:2018-05-04 08:14:18

标签: python

假设我在Python中创建一个递归嵌套列表,如下所示:

>>> a = [1,2]
>>> a += [a]

一些属性:

  • len(a)3
  • a[2] is aTrue

打印a时会发生什么?这似乎是:

>>> a
[1, 2, [...]]

类似地:

>>> a[2]
[1, 2, [...]]

为什么呢? Python"如何知道"列表中的递归?如何检测递归?

1 个答案:

答案 0 :(得分:10)

当Python构建repr内置对象的list时,它使用两个内部函数:Py_ReprEnter(PyObject *)Py_ReprLeave(PyObject *)

这些函数中的第一个检查我们是否已经处理了指定对象的repr(即查看它是否正在记住该对象)。如果没有,它会记住该对象并返回0.在这种情况下,repr代码打印对象,然后调用Py_ReprLeave,从当前正在跟踪的集合中删除对象。

如果Py_ReprEnter已经跟踪对象,则返回非0,在这种情况下,列表重新编码代码将打印[...]