Веб-версияОткрыть в Telegram

ПостВопрос с собеседования

27 ноября 2025
P
Python tests
Вопрос с собеседования Что выведет этот код и почему? a = [1, 2, 3] b = a a += [4, 5] print(a) print(b) a = (1, 2, 3) b = a a += (4, 5) print(a) print(b) Попробуй сначала сам ответить, а потом смотри разбор. Часть 1. Списки a = [1, 2, 3] b = a a += [4, 5] print(a) print(b) Что происходит по шагам: a = [1, 2, 3] Переменная a ссылается на список [1, 2, 3]. b = a Теперь b ссылается на тот же самый список, что и a. Не копия, а один и тот же объект в памяти. a += [4, 5] Важно: для списков += работает как изменение объекта на месте: это примерно то же самое, что: a.extend([4, 5]) То есть в существующий список, на который ссылаются и a, и b, добавляются элементы 4 и 5. Поэтому: print(a) # [1, 2, 3, 4, 5] print(b) # [1, 2, 3, 4, 5] Оба указывают на один изменённый список. Часть 2. Кортежи a = (1, 2, 3) b = a a += (4, 5) print(a) print(b) Кортежи неизменяемы, и здесь начинается магия. a = (1, 2, 3) a ссылается на кортеж (1, 2, 3). b = a b ссылается на тот же кортеж (1, 2, 3). a += (4, 5) Для кортежей += уже не может менять объект на месте (они immutable). Поэтому Python делает так: a = a + (4, 5) То есть создаётся новый кортеж (1, 2, 3, 4, 5) и переменная a переназначается на него. b при этом остаётся смотреть на старый кортеж (1, 2, 3). Поэтому: print(a) # (1, 2, 3, 4, 5) print(b) # (1, 2, 3) В чём хитрость Для списка a += [4, 5] мутирует объект на месте, и это видно через все переменные, которые на него ссылаются. Для кортежа a += (4, 5) создаёт новый объект и переназначает только a. Итого: # Часть со списком: [1, 2, 3, 4, 5] [1, 2, 3, 4, 5] # Часть с кортежем: (1, 2, 3, 4, 5) (1, 2, 3) Если хочешь, могу ещё один хитрый вопрос разобрать - про изменяемые значения по умолчанию в аргументах функции или про циклы и замыкания.
6 · 1.1K ·

Рядом в ленте

PPython testsФотографияPPython tests❌Python: Никогда не делай так!!! НИКОГДА НЕ ИСПОЛЬЗУЙ МУТАБЕЛЬНЫЕ ДЕФОЛТЫ: не используй изменяемые объекты (например, списки или словари) как значения по умолча
это сообщение
PPython testsФотографияPPython tests🐍 Хитрая ловушка в Python, на которую попадаются даже опытные matrix = [[0] * 3] * 3 matrix[0][0] = 1 matrix[1].append(9) print(matrix) print(len(matrix)) print

Открытая публичная лента из поискового индекса ChatCrawler — «Google по публичному Telegram»; обновляется по мере обхода площадки. Время — UTC.

Только публичный контент, официальный API Telegram. О проекте · Вопросы · Чего мы не делаем · Убрать страницу из выдачи · Каталог · Поиск · Как мы считаем