Python Core

Об'єкти, значення і типи

Усе в Python є об'єктом із типом, ідентичністю та значенням. Літерали, типи int, float, str, bool і None, функції type та id, системи числення, цілі числа довільної точності та чому 0.1 + 0.2 не дорівнює 0.3.

Об'єкти, значення і типи

Що лежить у пам'яті, коли ви пишете 42

У попередньому уроці print виводив текст. Тепер розглянемо самі дані: що таке "Hello", 42 чи 3.14 з точки зору Python. Кожне таке значення зберігається в пам'яті як об'єкт (object) — структура, яка містить не лише значення, а й відомості про нього. Від цього залежить, що можна робити зі значенням: числа додають, тексти склеюють, а додати число до тексту не можна.

🎯 Мета лекції

  • Пояснити, що в Python усе є об'єктом із типом, ідентичністю та значенням.
  • Визначати тип значення функцією type().
  • Записувати числа в різних системах числення.
  • Знати, чим int відрізняється від float і чому 0.1 + 0.2 не дорівнює 0.3.
  • Розуміти, що bool — це різновид int, а None існує в єдиному екземплярі.

🔑 Ключові терміни

  • Літерал: значення, записане безпосередньо в коді (42, "текст").
  • Об'єкт: значення в пам'яті з типом та ідентичністю.
  • Тип (type): що це за значення й що з ним можна робити.
  • Ідентичність (identity, id): номер, що відрізняє об'єкт від інших.
  • IEEE 754: стандарт зберігання дробових чисел.

Пригадаємо попередній урок

Усе в Python — об'єкт

Літерал (literal) — значення, записане прямо в коді: 42, 3.14, "Привіт". Коли Python виконує літерал, він створює в пам'яті об'єкт. Кожен об'єкт має три характеристики:

  • тип — вид значення (int, str тощо);
  • ідентичність — число, яке відрізняє цей об'єкт від інших, поки він існує;
  • значення — власне дані.

Тип показує функція type(), ідентичність — функція id():

x = 42
print(type(x))
print(type(id(x)))
print(id(x) == id(x))
<class 'int'>
<class 'int'>
True

id() повертає ціле число. Його значення відрізняється між запусками та комп'ютерами, тому порівнювати треба лише id одного й того самого об'єкта. Зараз x = 42 лише показує, що значення можна зберегти під іменем. Детально про імена йтиметься в наступному уроці.

Основні типи

У цьому курсі ми почнемо з п'яти типів:

ТипЩо зберігаєПриклад
intцілі числа42, -5, 0
floatдробові числа3.14, -0.4
strтекст"Привіт"
boolістина або хибаTrue, False
NoneType«немає значення»None

Тип визначає форма літерала. Наявність крапки перетворює ціле на дробове:

print(type(4))
print(type(4.0))
print(type(.4))
print(type("4"))
<class 'int'>
<class 'float'>
<class 'float'>
<class 'str'>

Значення 4, 4.0 і "4" виглядають схоже, але це три різні об'єкти різних типів. Вираз із числом і дробом дає дріб: type(1 + 2.0) — це float.

Лапки роблять число текстом: "4" — рядок, а не число. "4" + "4" дає "44", а 4 + 4 дає 8. Python визначає операцію за типом, а не за виглядом значення.

Цілі числа

Літерал int — це цифри без дробової частини. Для зручності читання між цифрами можна ставити підкреслення: 1_000_000 — те саме, що 1000000. Від'ємні числа мають мінус: -50.

Особливість Python: цілі числа не мають верхньої межі (обмеженої лише пам'яттю). Математичні операції з великими числами працюють без спеціальних дій:

print(2**100)
print(2**1000 > 10**300)
1267650600228229401496703205376
True

У багатьох мовах (C, Java) int займає фіксовану кількість байтів, і число більше за межу «переповнюється». У Python int зберігається як список «цифр» за основою 2³⁰ (приблизно мільярд), і список стає довшим. Число 2**100 займає чотири такі цифри.

Звідси наслідок: об'єкт великого числа займає більше пам'яті. Функція sys.getsizeof показує розмір об'єкта в байтах:

import sys

print(sys.getsizeof(1))
print(sys.getsizeof(2**100))
print(sys.getsizeof(2**1000))
28
40
160

Системи числення

Одне й те саме число можна записати по-різному. Python підтримує чотири системи:

СистемаПрефіксЦифриЧисло 83
десяткованемає0–983
двійкова0b0, 10b1010011
вісімкова0o0–70o123
шістнадцяткова0x0–9, A–F0x53
print(0b101010, 0o123, 0x123, 0xFF)
print(bin(42), oct(83), hex(291))
print(int("101010", 2), int("ff", 16))
42 83 291 255
0b101010 0o123 0x123
42 255

Літерали 0b…, 0o…, 0x… записують число в потрібній системі. Функції bin(), oct(), hex() повертають текстовий запис числа в цій системі. Функція int(рядок, основа) виконує зворотне перетворення. Усі чотири записи — це одне й те саме число, змінюється лише форма запису. Двійкова система використовується для бітів, шістнадцяткова — для кольорів і адрес у пам'яті.

Дробові числа

Літерал float містить крапку, а не кому: 2.5, -0.4. Нулі можна не писати: .4 означає 0.4, а 4. означає 4.0. Дуже великі й малі числа записують в експоненційній формі: 3e8 означає 3 · 10⁸.

print(3e8)
print(6.62607E-34)
print(7 / 2, 7 // 2)
300000000.0
6.62607e-34
3.5 3

Звичайне ділення / завжди дає float, цілочисельне // — int (для цілих операндів).

Чому 0.1 + 0.2 не дорівнює 0.3

print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)
0.30000000000000004
False

Це не помилка Python. Комп'ютер зберігає float у двійковому вигляді за стандартом IEEE 754: 64 біти поділено на знак, експоненту й мантису. Число 0.1 у двійковому записі нескінченне (як 1/3 у десятковому), тому в мантису поміщається лише наближене значення:

print(f"{0.1:.30f}")
0.100000000000000005551115123126

Під час додавання дві такі невеликі похибки складаються, і результат трохи відхиляється від 0.3. Така поведінка властива всім мовам, які використовують IEEE 754: JavaScript, Java, C. Числа, що є степенями двійки (наприклад, 0.5 і 0.25), зберігаються точно.

Дробові числа не порівнюють через ==. Для порівняння використовують допустиму похибку, наприклад math.isclose(a, b):
import math

print(math.isclose(0.1 + 0.2, 0.3))
True
Для грошей і підрахунків, де потрібна точність, використовують цілі числа (копійки) або модуль decimal.

bool і None

bool має лише два значення: True і False. Особливість Python: bool — це підтип int, причому True дорівнює 1, а False дорівнює 0.

print(True + True)
print(isinstance(True, int))
print(bool(0), bool(""), bool("a"), bool([]), bool(-1))
2
True
False False True False True

Функція bool() перетворює значення на True чи False. Хибними (False) є 0, порожній рядок, порожній список і None. Решта значень — істинні. Це знадобиться в уроці про логіку.

None — спеціальний об'єкт, який означає «значення відсутнє». Протягом усієї програми існує лише один об'єкт None, тому його перевіряють через is:

print(None is None)
print(type(None))
True
<class 'NoneType'>

Підсумок

  1. Усі значення в Python — об'єкти з типом, ідентичністю та значенням.
  2. type() показує тип, id() — ідентичність.
  3. Тип визначає, що можна робити зі значенням: 4, 4.0 і "4" — різні об'єкти.
  4. int не має верхньої межі: він зберігається як список 30-бітних цифр.
  5. float зберігається за стандартом IEEE 754, тому 0.1 + 0.2 не дорівнює 0.3. Дроби порівнюють із допустимою похибкою.
  6. bool — підтип int, None — єдиний об'єкт типу NoneType.

Типові хибні уявлення

Передбачте, перш ніж запускати

Практичні завдання

Наступний урок: змінні. Імена, що посилаються на об'єкти, присвоєння, різниця між is і ==, і чому b = a не копіює значення.
Copyright © 2026