TGViewer
Сповідь тестувальника Сповідь тестувальника @qa_confession · 599 subscribers
Post #61 277
Про Python (і не тільки).
Продовження попередньої частини.

Частина 🔤
Будемо їсти цього "слона" шматочками. Отже, зупинилися на тому, що змінні це не скрині. Що тоді? Мітки, ярлики (якщо простою мовою). Ідентифікатори (якщо казати суворіше). Але не лише, бо всі ці терміни наче є синонімами до слова "ім'я", але наші змінні є чимось більшим.

Вони не лише ім'я (хоча тільки його ми бачимо у коді), але й вказівник на місце у пам'яті, де зберігаються дані. Простіша, але правильна аналогія — вони це ярлик, на якому ми написали ім'я та причепили на дані.

Чи можна на одні й ті самі дані начепити кілька ярликів? Або: чи може декілька ідентифікаторів вказувати на одну й ту саму область в пам'яті? Так, все це може бути. І саме це ми й бачили у попередньому дописі.

Пригадаємо, що ми робили таке:
y = x

І тут ми, як вже знаємо, не створювали скриню, хоча й визначили нове ім'я — "y". І тепер ім'я "y" вказує на ті самі дані, що створилися раніше, коли ми написали таке:
x = ['A', 'B']


Щоб не копати надто глибоко, скажу, що однією з причин такої поведінки є економія пам'яті комп'ютера, де зберігаються дані програми.

Отже, цей код:
x = ['A', 'B']
y = x

зробив наступне:

1. В пам'яті зберіг дані: список ['A', 'B']
2. Створив нове ім'я "х"
3. Зв'язав ім'я "х" з даними (нашим списком)
4. Створив нове ім'я "у"
5. Зв'язав ім'я "у" з тими ж(!) даними (на які вказує х)

Або: повісив на наш список два ярлика: "х" та "у".

Ми отримали ситуацію, коли два імені вказують на одні й ті самі дані. Кажучи суворіше — вказують на однакову область в пам'яті (де зберігаються наші дані).


Частина 🔤
Що відбулося потім? Потім ми зробили це:
x.append('C')

, і ця команда додала новий елемент до списку, не змінюючи його місця у пам'яті. Просто список став довше.

А наші змінні х та у, як і раніше, продовжують на цей список вказувати. Ярлики ніхто не зривав.

Зверніть увагу: виконуючи команду x.append(), ми наче застосовуємо її до змінної х, правда? Але ми вже з'ясували, що змінні не є скринями. Отже, механізм дещо інший. Python побачив ім'я "х", звісно. Але далі пішов за адресою, куди наш "х" вказує. І всі зміни відбулися в пам'яті, над даними.

Наче як сказати: "Серед мішків на складі знайди той, на якому ярлик з надписом "х" та додай до мішка ось це яблуко"

Імена "х" та "у" так і лишилися іменами, вказівниками на дані. Змінилися самі дані, все інше залишилося.

Саме тому, коли ми в кінці надрукували значення:
print(x)
print(y)

, то отримали однаковий результат. Бо обидві змінні вказують на однакові дані.

Цікаво, чи буде різниця, якщо викликати команду для збільшення списку через ім'я y замість x? Ось так:
y.append('C')

Ви вже знаєте відповідь. Результат буде таким самим. Яка різниця, якщо я покладу яблуко у мішок з ярликом "у", адже це той самий мішок, на якому і ярлик "х"?

Не скриньки. Лише ідентифікатори з вказівниками на дані. Ярлики на мішках на складі.

Але і це ще не всі ракурси теми, бо в інших випадках аналогія з мішком стає дещо недолугою та потребує доповнення.

❗️Діятимо далі за тим самим принципом: залишайте вподобайки, і я продовжу.
  • 👍 17
  • 🔥 2
More from @qa_confession
  1. Oct 12, 2026Тут всі навколо розказують, що вони летять на Бетельгейзе, промокодами на знижку діляться.…
  2. Oct 6, 2026Привіт, мій щоденнику... Так приємно чути, коли фахівці використовують правильні терміни!…
  3. Oct 2, 2026Привіт, мій щоденнику... Знову про "ШІ"-пошук у Гугл. Щойно шукав інформацію про одну гру,…
  4. Sep 30, 2026Мені здається, вам сподобається ця маленька історія та питання, що йде за нею: https://lnk…
  5. Sep 26, 2026Привіт, мій щоденнику... Все частіше чую тези про заміну тестувальників агентами/скілами.…
  6. Sep 23, 2026Привіт, мій щоденнику... Безглузда статистика. Загальний досвід учасників конференції "Бет…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →