Перейти до змісту

Об'єкти в 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 усе є об'єкт

Зараз просто запам'ятайте це ствердження. У подальшому ми будемо згадувати його не один раз і, власне, з'ясуємо що воно означає.