我正在研究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, [...], [...]]
变量如何在无限循环中分配给自身?
答案 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_]