Да, как показывает ваш собственный код, список может содержать себя в качестве члена. Строго говоря, список содержит ссылку на сам . Думайте об этом как о книге, у которой есть собственное название, написанное на одной из ее страниц;книга на самом деле не содержит самого , просто ссылку на себя, так что в этом нет никакого парадокса.
Что касается цели, редко есть причина для этого;но у языка нет веских причин, чтобы помешать вам сделать это. Однако более косвенные рекурсивные ссылки могут быть очень полезны. Рассмотрим структуру данных списка смежности для графа:
class Node:
def __init__(self, name):
self.name = name
self.neighbours = []
# the graph has two nodes
node_a = Node('a')
node_b = Node('b')
# they are neighbours of each other
node_a.neighbours.append(node_b)
node_b.neighbours.append(node_a)
Теперь node_a.neighbours[0].neighbours
- это список, который содержит node_a
- рекурсивную ссылку на себя.