Домашнє завдання

03 · Змінні та обʼєкти

Одна ідея на всі три рівні: імʼя вказує на обʼєкт, а не вміщує його. Кожне завдання перевіряє, чи ти справді користуєшся цією моделлю, а не звичною «коробкою зі значенням».

Усе роби в окремому файлі dz_03.py або в новому зошиті. Кожен пункт має щось друкувати — інакше нема чого перевіряти.


рівень 1Рівень 1 — База

Повтори головний дослід лекції на своїх даних.

  1. Створи список із трьох улюблених фільмів і дай йому імʼя фільми.
  2. Дай тому самому списку друге імʼя улюблене.
  3. Додай четвертий фільм через друге імʼя (улюблене.append(...)).
  4. Надрукуй фільми і доведи двома різними способами, що обʼєкт один: через фільми is улюблене і через порівняння id(фільми) з id(улюблене).
  5. Тепер зроби справжня_копія = фільми.copy(), додай туди пʼятий фільм і надрукуй обидва списки поруч.

Зроблено, якщо: у виводі видно, що після кроку 3 у фільми чотири назви, is і порівняння id() обидва дають True, а після кроку 5 два списки відрізняються й фільми is справжня_копія дає False.


рівень 2Рівень 2 — Плюс

Тут .copy() тебе підведе — і треба зрозуміти чому.

  1. Створи розклад = [["пн"], ["вт"]] — список, усередині якого лежать списки.
  2. Зроби копія = розклад.copy().
  3. Виконай копія[0].append("математика").
  4. Надрукуй розклад і копія. Потім надрукуй розклад[0] is копія[0].
  5. Напиши коментарем 3–5 речень: скільки всього обʼєктів у памʼяті після кроку 2, що саме скопіював .copy(), і чому зміна всередині копія[0] видно в розкладі.
  6. Знайди спосіб зробити копію, яка від цього захищена (підказка: модуль copy), і повтори кроки 3–4 з нею.

Зроблено, якщо: у виводі видно, що після .copy() слово «математика» зʼявилось в обох списках, розклад[0] is копія[0] дає True, пояснення написане своїми словами, а з другим способом копіювання той самий розклад лишається без змін.


рівень 3Рівень 3 — Виклик

Дослідження на межі: коли is бреше.

  1. Напиши три рядки коду, після яких a == b дає True, а a is bFalse.
  2. Напиши три рядки, після яких обидва оператори дають True.
  3. Для кожної пари надрукуй id(a), id(b) і коментарем поясни, скільки обʼєктів створено.
  4. Знайди експериментально межу кешу цілих чисел: перевір a is b для a = n, b = int(str(n)) при n, що дорівнює 255, 256, 257, 258, і надрукуй результат для кожного.
  5. Одним абзацом відповідай на питання: чому результат пункту 4 не можна використовувати в робочому коді, навіть якщо він стабільно відтворюється на твоєму компʼютері.

Зроблено, якщо: обидві пари з пунктів 1–2 працюють як заявлено, у виводі пункту 4 видно зміну відповіді десь між 256 і 257, а в поясненні названо головне: це деталь реалізації CPython, а не гарантія мови.


Підказки