Відповіді0 / 8
правильних: 0
Питання 1 / 8
Що лежить у x після рядка x = (50.45) ?
Чому так. Кортеж робить кома, а не дужки. У
(50.45) дужки просто групують вираз, як у математиці, — тому там лишається звичайний float. Щоб отримати кортеж з одного елемента, кома обовʼязкова: (50.45,) або навіть просто 50.45, без дужок.Питання 2 / 8
Виконується рядок a, b = (10, 20, 30). Що станеться?
Чому так. Кількості мусять збігтися точно: Python не вирішує за тебе, що викинути, а зупиняє програму з
ValueError: too many values to unpack (expected 2). Спокуслива відповідь про «a вже встигло» хибна: перевірка кількості відбувається до будь-якого присвоєння, тому після невдалого розпакування наполовину заповнених імен не буває.Питання 3 / 8
Що опиниться в rest після a, *rest = (10,) ?
Чому так. Імена без зірочки розбираються першими, тож
a забирає 10, а зірочці лишається нуль елементів — і це цілком законний випадок, а не помилка. Зірочка завжди складає зібране у список, навіть коли праворуч був кортеж і навіть коли збирати нема чого: результат — [].Питання 4 / 8
Чому a, b = b, a міняє значення місцями, а два окремі рядки a = b і b = a — ні?
Чому так. Присвоєння йде у два етапи: спершу обчислюється вся права частина (з неї пакується кортеж
(2, 1)), і лише потім імена роздаються зліва направо. Старі значення вже лежать усередині кортежа, тому перезапис імені їх не губить. У наївному варіанті проміжного сховища немає: після a = b на одиницю не дивиться вже ніхто. Присвоєння при цьому не «одночасні» — вони строго послідовні, просто відбуваються після обчислення.Питання 5 / 8
дані = ([1, 2], "текст"). Що зробить рядок дані[0].append(3) ?
Чому так. Незмінність кортежа діє лише на один рівень: зафіксовано набір посилань, а не обʼєкти на іншому кінці стрілок.
дані[0].append(3) стрілку не чіпає взагалі — воно змінює сам список, тому id(дані[0]) лишається тим самим. А ось дані[0] = [9] — це вже спроба перевести стрілку, і саме вона дає TypeError.Питання 6 / 8
Чому hash(([1],)) падає, хоч зовні це звичайний незмінний кортеж?
Чому так. Python бере відбиток кожного елемента й перемішує їх в одне число. Якщо хоч один елемент відбитка не має, рахувати нема з чого — тому кортеж хешований тоді й лише тоді, коли хешовані всі його елементи, на будь-якій глибині. Показово, що повідомлення каже
unhashable type: ʼlistʼ, а не ʼtupleʼ: Python прямо називає винуватця всередині.Питання 7 / 8
У програмі є пара координат, яку треба зробити ключем словника. Що з наведеного — справжня причина взяти саме кортеж, а не список?
Чому так. Це не питання зручності, а питання можливого й неможливого:
hash([50.45, 30.52]) дає TypeError, і жодним трюком список ключем не стане. Решта варіантів — міфи: обхід у них однаковий (0.139 проти 0.153 с у замірах лекції), на тисячі елементів памʼять майже збігається (8056 проти 8040 байтів), а сортувати на місці кортеж якраз не вміє.Питання 8 / 8
Точка = namedtuple("Точка", "широта довгота"); київ = Точка(50.45, 30.52). Що з цього НЕправда?
Чому так.
namedtuple не створює новий тип даних — він робить різновид кортежа. Тому isinstance(київ, tuple) дає True, індексація, розпакування, порівняння й хеш працюють точно як у звичайного кортежа. Змінилося одне: до індексів додалися імена полів, і київ.широта читається краще за київ[0].