Он не обнуляется, а выбрасывается. А вместо него создаётся новый пустой список. Соответственно, у разных списков разные адресы в памяти и разное содержимое. На следующем круге происходит то же самое и остаётся уже три списка с разными адресами в памяти и разным содержимым. И так далее. И вот эти разные списки добавляются в список ml2. У них разные адресы в памяти и разное содержимое у всех.
Он не обнуляется, а остаётся и продолжает заполняться дальше. У него один адрес в памяти и поэтому при его добавлении в список ml1 добавляется просто копия его адреса в памяти. Поэтому на каждом шаге ты добавляешь его же самого. А так как он растёт всё время, то к концу основного цикла этот список вырастает полностью.
>>> a = []
>>> lst = [a, a, a]
>>> lst
[[], [], []]
>>> a.append(1)
>>> lst
[[1], [1], [1]]
>>> a.append(2)
>>> lst
[[1, 2], [1, 2], [1, 2]]
>>> a.append(3)
>>> lst
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
>>>
>>> c = []
>>> d = []
>>> e = []
>>>
>>> lst = [a, c, a, d, a, e]
>>> lst
[[1, 2, 3], [], [1, 2, 3], [], [1, 2, 3], []]
>>> c.append(10)
>>> lst
[[1, 2, 3], [10], [1, 2, 3], [], [1, 2, 3], []]
>>> d.append(20)
>>> lst
[[1, 2, 3], [10], [1, 2, 3], [20], [1, 2, 3], []]
>>> e.append(30)
>>> lst
[[1, 2, 3], [10], [1, 2, 3], [20], [1, 2, 3], [30]]
>>> a.append(4)
>>> lst
[[1, 2, 3, 4], [10], [1, 2, 3, 4], [20], [1, 2, 3, 4], [30]]
>>>