Пустой кортеж в Python

Рейтинг: 0Ответов: 1Опубликовано: 29.07.2023

Почему в Python () - пустой кортеж, список с пустым кортежем внутри это [()], но при этом при выполнении такого кода

l = [1,2,3]
l[:] = ()
print(l)

интерпретатор выведет пустой список? Функция len() также выдает, что список пустой

Ответы

▲ 3Принят

Тут надо понимать разница между присваиванием значения элементу списка, и присваиванием значения срезу списка.

Если перед "равно" у вас стоит один элемент списка, то значение справа от "равно" заменяет собой это значение:

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)
# Выведет: [()]