В чём разница между list() и []?
[] - это литерал для list()
list() - это конструктор списка.

В вашем случае разница в контексте. Выражение [range(5)] означает "список содержащий один генератор", а list(range(5)) означает "привести генератор к списку". Во втором случае происходит вычисление генератора в пять целых чисел и конструирование списка из них.
в том что range это итератор, а лист это список. Итератор возвращает значение когда его спросят, а список это хранилище всех значений. Функция лист - опрашивает из итератора все значения которые он может вернуть.

разница в том что либо вы помните что у вас (начало,конец,шаг,текущее положение) или вы помните (10,20,30,40,50,60,...100500) - в случае списка ему придется занять память всеми значениями, а в случае итератора лишь хранить параметры для извлечения нового значения.