Развёрнутое пояснение:Выражение a + [3] порождает новый список, который затем присваивается переменной a, не затрагивая исходный объект, на который ссылается b. Если бы использовалось a += [3], вызвался бы метод __iadd__, изменяющий список на месте, и тогда b тоже бы изменился. Таким образом, оператор присваивания с + не модифицирует исходный список.
Python: задачки и вопросы
@quiz_python
Вопросы и задачки для подготовки к собеседованиям и прокачки навыковРазместить рекламу: @tproger_sales_botПравила общения: https://tprg.ru/rulesДругие каналы: @tproger_channelsДругие наши проекты: https://tprg.ru/media
Похожие каналы
Все →Последние посты
Подробное объяснение1️⃣ Python 3 компилирует super() без аргументов в super(__class__, <first_arg>).2️⃣ Компилятор создаёт __classcell__ — ячейку замыкания с классом B.3️⃣ Внутри inner() Python ищет __class__ в замыканиях — находит B.4️⃣ self берётся из параметра f(self) через цепочку замыканий.5️⃣ super().f() → A.f(self) → возвращает "A".Почему это важноВ Python 2 super(B, self) было обязательно. В Python 3 zero-argument super() работает через магию компилятора — даже во вложенных функциях.
Подробное объяснение1️⃣ next(g) → yield 1 → возвращает 1.2️⃣ next(g) → yield 2 → возвращает 2, останавливается на x = yield 2.3️⃣ g.send(10) → отправляет 10 в левую часть yield → x = 10.4️⃣ Генератор продолжается до yield x → возвращает 10.5️⃣ Итог: 1 2 10.Почему это важноsend() — основа корутин в asyncio. Понимание двунаправленной коммуникации с генератором критично для асинхронного кода.
Подробное объяснение1️⃣ case Animal() проверяет isinstance(d, Animal).2️⃣ Dog — подкласс Animal, поэтому проверка возвращает True.3️⃣ Выполняется print("A"), блок case Dog() пропускается.4️⃣ Match не падает сквозь — только первый подходящий case.5️⃣ print("done") выполняется в любом случае.Почему это важноБолее общий паттерн сверху перехватывает частные. Чтобы Dog сработал — поменяйте порядок: Dog выше Animal.
Подробное объяснение1️⃣ @dataclass создаёт __init__(self, tags=[]) — пустой список вычисляется один раз при определении класса.2️⃣ u1 = User() и u2 = User() получают ссылку на один и тот же список.3️⃣ u1.tags.append("admin") мутирует этот список.4️⃣ u2.tags видит ту же мутацию — выводит ['admin'].5️⃣ Правильно: tags: list = field(default_factory=list).Почему это важноТот же баг, что и в обычной функции, но скрыт за декоратором. default_factory создаёт новый объект для каждого экземпляра.
Подробное объяснение1️⃣ hash(1) == hash(1.0) == hash(True) == 1.2️⃣ 1 == 1.0 == True → все дубликаты в set → len → 1.3️⃣ a is b → 1 is 1.0 → разные типы, разные объекты → False.4️⃣ a is c → 1 is True → False.5️⃣ Вывод: 1 False False.Почему это важноis для чисел — антипаттерн. Работает случайно для малых чисел, ломается в production. Всегда используйте ==.
Подробное объяснение1️⃣ a = Singleton(): _inst равен None → создаётся объект → _inst заполнен.2️⃣ b = Sub(): Sub не переопределяет __new__, использует родительский.3️⃣ Внутри __new__ проверяется cls._inst. Python ищет _inst в MRO: Sub.__dict__ → Singleton.__dict__.4️⃣ Находит _inst в Singleton (уже не None) → возвращает тот же объект.5️⃣ a is b → True. Тип объекта — Singleton (создан через super().__new__(cls) в первый раз).6️⃣ Вывод: True Singleton Singleton.Почему это важно?Наследование ломает изоляцию Singleton. Каждый подкласс должен иметь свой _inst, иначе все клонируют объект родителя.
Подробное объяснение1️⃣ Выражение [0] * 3 создаёт список [0, 0, 0] — один объект в памяти.2️⃣ Выражение [[0, 0, 0]] * 3 создаёт три ссылки на этот же объект, а не три независимых списка.3️⃣ Переменная m содержит [[0,0,0] ref, [0,0,0] ref, [0,0,0] ref]. Все ref → один объект.4️⃣ m[0][0] = 1 обращается к первой ссылке, находит тот же список и меняет его первый элемент.5️⃣ Поскольку все три строки ссылаются на один список, изменение видно во всех строках.6️⃣ Вывод: [[1, 0, 0], [1, 0, 0], [1, 0, 0]].Почему это важно:Классический баг при создании игровых полей, таблиц и матриц. Чтобы сделать независимые строки, используйте list comprehension: [[0]*3 for _ in range(3)] — тогда каждая строка будет своим объектом.