Змінні¶
Змінні в Python не вимагають оголошення типу змінної (оскільки Python – мова з динамічною типізацією) і є посиланнями на область пам'яті. Правила іменування змінних:
- ім'я змінної може складатися лише з літер, цифр та знака підкреслення
- ім'я не може починатися із цифри
- ім'я не може містити спеціальних символів @, $, %
Приклад створення змінних у Python:
Зверніть увагу, що в Python не потрібно вказувати, що a це число, а b це рядок.
Імена змінних¶
Імена змінних не повинні перетинатися з назвами операторів та модулів або інших зарезервованих слів. У Python є рекомендації щодо іменування функцій, класів та змінних:
- імена змінних зазвичай пишуться або повністю великими або маленькими літерами (наприклад DB_NAME, db_name)
- імена функцій задаються маленькими літерами, з підкреслення між словами (наприклад, get_names)
- імена класів задаються словами з великими літерами без пробілів, це звані CamelCase (наприклад, CiscoSwitch)
В Python змінні це посилання¶
В Python змінні це посилання на об'єкти:
- об'єкт не зберігається у змінній
- змінна це посилання на реальний об'єкт у пам'яті
Приклад коду
Ліворуч створені змінні, праворуч - відповідні об'єкти у пам'яті:
Змінну можна сприймати як ярлик чи тег реальних даних. Наприклад, ми можемо створити дві змінні, які посилатимуться на той самий список (тобто два теги):
як це виглядає схематично:
Тепер один і той самий об'єкт доступний за двома іменами.
Приклад
На роботі до вас звертаються, наприклад, Олександр, а дома - Сашко, це два імені, але однієї людини.
Список це змінюваний тип данних, тому в цьому випадку дуже важливо те, що дві змінні посилаються на той самий об'єкт. Зміна об'єкту через будь-яку зі змінних, змінює той самий об'єкт. Наприклад, якщо змінити список через змінну vlans_sw1:
І після цього дати команду print для обох змінних, vlan 100 з'явиться в обох випадках:
In [1]: vlans_sw1 = vlans_sw2 = [10, 20, 30, 50]
In [2]: vlans_sw1.append(100)
In [3]: print(vlans_sw1)
[10, 20, 30, 50, 100]
In [4]: print(vlans_sw2)
[10, 20, 30, 50, 100]
Функція id дозволяє подивитися адресу об'єкту в пам'яті. Для змінних vlans_sw1, vlans_sw2 зараз ця адреса будет однакова:
Якщо знов створити два різні списки з двома різними змінними, id будуть різні:
In [8]: vlans_sw1 = [10, 20, 30, 50]
In [9]: vlans_sw2 = [15, 16, 17, 18]
In [10]: id(vlans_sw1)
Out[10]: 139810203155072
In [11]: id(vlans_sw2)
Out[11]: 139810181687744
Ще один важливий момент: коли змінна вказується у виразі праворуч від знаку рівності, вона завжди замінюється значенням (об'єктом) на яке вона посилається.
In [12]: sw1 = "10.1.1.1"
In [13]: sw2 = "10.2.2.2"
In [14]: ip_list = [sw1, sw2, "10.3.3.3"]
In [15]: ip_list
Out[15]: ['10.1.1.1', '10.2.2.2', '10.3.3.3']
В списку ip_list знаходяться рядки '10.1.1.1' та '10.2.2.2', а не змінні sw1, sw2.
Схематичне зображення посилань:
Елементи списку це посилання на інші об'єкти.
Id об'єкту на який посилається змінна sw1, та id першого елементу списку ip_list - однакові:
Всі ці моменти зі змінними мають найбільше значенне при використанні змінюваних типів данних. Важливо розуміти, що зазначення змінної в якомусь виразі Python, підставляє замість змінної об'єкт, на який посилається змінна і саме той самий об'єкт, а не його копію.
Наприклад, вираз vlans_sw2 = vlans_sw1
означає, що змінна vlans_sw2 буде
посиланням на той самий список, що і змінна vlans_sw1: