Переменные в 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]