@Maksimg0lubev

Откуда и как появляется зацикливание списка?

Почему, если добавить в список этот же список проявляется "[...]"?
lst = [] 
lst.append(lst) # [[...]]

Что делает этот код?
lst = [1, 2, 3, 4, 5]
lst[:] = [1, lst, 7, lst]

Откуда появляется рекурсия и как/почему она появляется в таких примерах?
Не должен ли переполняться стек?
  • Вопрос задан
  • 57 просмотров
Решения вопроса 1
kshnkvn
@kshnkvn Куратор тега Python
yay ✌️ t.me/kshnkvn
Переменные в python не хранят объекты, а ссылаются на них.
lst[:] = [1, lst, 7, lst]
Ты просто переопределяешь lst, то есть в списке у тебя ссылка на этот самый объект.

UPD.
lst = [1, 2, 3, 4, 5]
Сначала создаётся объект [1, 2, 3, 4, 5], после чего он присваивается (считай привязывается) к переменной lst. То есть на данный момент у тебя есть переменная lst которая ссылается на объект списка.
lst[:] = [1, lst, 7, lst]
Тут ты создаешь новый объект списка [1, lst, 7, lst], в котором помимо объектов int есть еще и ссылки lst, то есть не объекты, на которые ссылается эта переменная, а именно сама переменная, то есть ссылка. После чего ты переопределяешь переменную lst, в том числе внутри списка.
Для понимания:
In [1]: a = [1, 2, 3]

In [2]: b = a

In [3]: b.append(4)

In [4]: b
Out[4]: [1, 2, 3, 4]

In [5]: a
Out[5]: [1, 2, 3, 4]
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы