Python:递归变量

时间:2018-05-02 14:07:18

标签: python-2.7

我正在研究OrderedSet食谱,无法理解以下实现双向链表的代码。

list_ = []
list_ += [None, list_, list_]
>>> print list_[1]
[None, [...], [...]]
>>> print list_[1][1]
[None, [...], [...]]
>>> print list_[1][1][1]
[None, [...], [...]]
>>> print list_[1][1][1][1]
[None, [...], [...]]
>>> print list_[1][1][1][1][1]
[None, [...], [...]]

变量如何在无限循环中分配给自身?

1 个答案:

答案 0 :(得分:1)

有些变量不是“值”,而是“指针”。

list_变量是指向现有列表的指针。

所以,在这里你实际上是在创建一个列表:

pointer_to_list = [] #this list is stored in memory, and the pointer will look at it

在此处,您将向列表中添加三个元素:

pointer_to_list += [None, pointer_to_list, pointer_to_list]

此列表包含3个元素。 None, pointer, pointer

但实际上指针指向列表本身。这并不意味着它被无限“分配”,只是如果你得到指针的值,你就得到了整个列表。

列表中包含指针。并且指针指向列表,列表包含指针,指针指向列表.....

这使您能够无限地获取列表中列表中的列表。

但事实上,只存在一个列表,包含三个元素:无,指针,指针。

这也可以通过list_ += [None, list_]

完成