Python: рекурсивная переменная - PullRequest
0 голосов
/ 02 мая 2018

Я изучаю рецепт 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 голосов
/ 02 мая 2018

Некоторые переменные являются не «значениями», а «указателями».

Переменная 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_]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...