Об'єкти в Python
Об'єкт в Python — це певна вже створена структура даних.
Коли ми говоримо, наприклад, про список, то це тип даних (клас) list
.
Але якщо ми говоримо про
[1, 2, 3]
— це вже конкретний список, або ж об'єкт типу список (класу list
).
Кожен об'єкт в Python має такі атрибути (характеристики):
- значення (дані, стан об'єкта)
- тип даних
- ідентифікатор
Давайте створимо об'єкт:
>>> [1, 2, 3]
[1, 2, 3]
>>>
Як це працює:
- інтерпретатор виділяє пам'ять під об'єкт типу
list
- створює в виділеній ділянці пам'яті об'єкт типу
list
- присвоює створеному об'єкту унікальний ідентифікатор
- розміщує у цьому об'єкті значення
[1, 2, 3]
типуlist
При створенні кожен об'єкт отримує ідентифікатор — унікальне серед інших об'єктів ціле число.
В Python є вбудована функція id()
яка повертає ідентифікатор переданого їй об'єкта:
>>> id([1, 2, 3])
1221035900800
>>>
Для інтерпретатора CPython ідентифікатором об'єкта є адреса у пам'яті комп'ютера.
Отже результат функції id()
практично завжди буде різним.
Змінні в Python — це посилання на об'єкти. Розглянемо на прикладі:
>>> l = [1, 2, 3]
>>>
Як це працює:
- інтерпретатор виділяє пам'ять під об'єкт типу
list
- створює в виділеній ділянці пам'яті об'єкт типу
list
- присвоює створеному об'єкту унікальний ідентифікатор
- розміщує у цьому об'єкті значення
[1, 2, 3]
типуlist
- створює змінну
l
і пов'язує її посиланням з новоствореним об'єктом
Два різних об'єкти можуть містити однакові значення:
>>> a = [1, 2, 3]
>>> b = [1, 2, 3] # a і b посилаються на два різних об'єкти
>>> a == b # значення однакові
True
>>> id(a)
2104565917872
>>> id(b)
2104565917680
>>> id(a) == id(b) # об'єкти різні
False
>>>
В Python є спеціальний оператор порівняння: is
.
Повертає True
, якщо обидва операнди вказують на один об'єкт,
False
в іншому випадку.
>>> a is b
False
>>>
На один об'єкт може посилатись декілька змінних.
b = a # тепер # a і b посилаються на один об'єкт
>>> a is b
True
>>>
Є і "протилежний" оператор is not
:
>>> a is not b
False
>>>
Об'єкти в Python — це дуже важлива концепція. Кажуть що:
В Python усе є об'єкт
Зараз просто запам'ятайте це ствердження. У подальшому ми будемо згадувати його не один раз і, власне, з'ясуємо що воно означає.