Здесь список
l в функции func() является изменяемым объектом и инициализируется только один раз при первом вызове функцииПри последующих вызовах, если не передается другой список, используется уже существующий список
l, который сохраняет свое состояние между вызовамиВ первом вызове
func(2) в список добавляются элементы 0 и 1. Во втором вызове func(3, [3,2,1]) используется новый список [3,2,1], к которому добавляются 0, 1, 4В третьем вызове
func(3) снова используется исходный список l, который уже содержит 0 и 1, и к нему добавляются еще 0, 1, 4