2015-08-28 3 views
1

Предположим, я запустил программуЧто происходит, когда вы добавляете список самому себе?

x=[] 

x.append(x) 

print(x) 

я [[...]] в качестве выхода. Но что это значит? Является ли список хранения указателей, а затем указывая на себя? Или он копирует себя совсем не полностью? Как этот список хранится в памяти?

Поправка: Я пытаюсь понять, как питон выполняет эту самооценку. Если бы я хотел спроектировать способ хранения списков, который позволяет использовать самостоятельную ссылку, я бы сохранил переменную в виде пары значений, типа и значения данных. Если тип данных является int, тогда значение представляет собой целое число, которое сохраняется, но если тип данных является списком, я бы сказал, что сохраненное значение должно быть указателем, но указывать где? Начало списка, как в C?

+0

Если список элемент сам по себе, оно бесконечно рекурсивным, и поэтому невозможно распечатать в обычном формате. – khelwood

ответ

1

Списки Python содержат ссылки (похожие на указатели) на объекты. Список может ссылаться на себя. Просто не пытайтесь и рекурсивно перебирать список, иначе вы закончите переполнение стека.

+3

... или в результате переполнения стека. –

+0

Почему бы не обойтись? :-) – IanAuld

0

Я думаю, что результат, который вы видите, становится более понятным, если вы добавите еще один элемент в список. У вас есть:

>>> x = [] 
>>> x.append(x) 
>>> x 
[[...]] 

Если добавить еще одно значение x:

>>> x.append(1) 

Тогда мы имеем:

>>> x 
[[...], 1] 

Здесь [...] просто способ Пайтона представления о том, что список встроена сама по себе.

И конечно:

>>> x[0] 
[[...], 1] 
>>> x[0][0][0] 
[[...], 1] 
>>>