В первом случае вы инициализируете массив из списка из 4 элементов. Это даст вам массив из 4 элементов: по одному для каждого значения в списке.
Во втором случае вы инициализируете массив из байтовой строки: байты в строке будут скопированы непосредственно в массив. Спецификатор 'L' создает массив длинных без знака, размер которых минимум 4 байта.
На моей машине (Windows 64 bit Python 2.6) инициализация из 4-байтовой строки работает нормально:
>>> a = array('L','\xff\xff\xff\xff')
>>> a.tostring()
'\xff\xff\xff\xff'
Я полагаю, какая версия Python, которую вы используете, имеет длину без знака, равную 8 байтам, а не 4. Попробуйте преобразовать созданный вами массив из списка обратно в строку и посмотрите, сколько байтов содержит:
>>> a = array('L',[0xff,0xff,0xff,0xff])
>>> a.tostring()
'\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00'
P.S. Я предполагаю, что вы используете Python 2.x, в Python 3.x вместо этого вы бы получили TypeError.