Возможно создание бесконечного вложенного списка в Python. Это ясно и, хотя и не популярно и определенно не полезно, является известным фактом.
>>> a = [0]
>>> a[0] = a
>>> a
[[...]]
>>> a[0] == a
True
Мой вопрос: что здесь происходит:
>>> a = [0]
>>> b = [0]
>>> a[0], b[0] = b, a
>>> a
[[[...]]]
>>> b
[[[...]]]
>>> a == b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: maximum recursion depth exceeded in cmp
>>> a[0] == b
True
>>> a[0][0] == b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: maximum recursion depth exceeded in cmp
>>> a[0][0][0] == b
True
>>>
Что каждый путь глубже, когда я пытаюсь понять это, я чувствую себя намного больше, как мой мозг собирается взорваться. Я вижу, что a содержит b, содержащий a и т.д....
Теперь мои вопросы об этом. У нас действительно есть два списка, или только один? Как такая вещь хранится в памяти? Что может быть целью, позволяющей программистам реализовать что-то настолько странное, как это?
Пожалуйста, не рассматривайте этот вопрос супер-серьезным. И не забывайте, что программирование иногда может быть забавным.