Тут надо понимать разница между присваиванием значения элементу списка, и присваиванием значения срезу списка.
Если перед "равно" у вас стоит один элемент списка, то значение справа от "равно" заменяет собой это значение:
l = [1, 2, 3]
l[0] = ()
print(l)
# Выведет: [(), 2, 3]
Но если в левой части присваивания у вас стоит срез списка, то срез - это последовательность, и заменить его можно только другой последовательностью. Поэтому интерпретатор рассматривает правую часть присваивания как последовательность, элементы которой надо присвоить срезу:
l = [1, 2, 3, 4, 5]
l[:2] = (9, 9)
print(l)
# Выведет: [9, 9, 3, 4, 5]
В примере выше видно, что вместо среза первых двух элементов подставился не сам кортеж, а содержащиеся в нём элементы.
С пустым кортежем всё то же самое, только элементов в нём нет, и вместо взятого среза подставляется ничего.
l = [1, 2, 3, 4, 5]
l[:2] = ()
print(l)
# Выведет: [3, 4, 5]
Соответственно, если вашей целью является заменить срез на один элемент, представляющий собой пустой кортеж, то в правой части должен быть не просто пустой кортеж, а последовательность, содержащая один пустой кортеж:
l = [1, 2, 3]
l[:] = [()]
print(l)
# Выведет: [()]