Proměnné jsou jména

Jak v Pythonu fungují proměnné? Už asi víš, že se přiřazují pomocí rovnítka, a že se pak dají používat ve výrazech. Pojďme se na ně podívat trochu podrobněji.

Toto je první ze série článků o tom, jak funguje Python. Pokud jsi se dostala přímo sem, koukni na Rozcestník a trochu se zorientuj.


Na rozdíl od jazyků jako C, kde proměnná je vyhrazené místo v paměti, Proměnné v Pythonu jsou jména, nebo řekněme ukazatele.

Abych to vysvětlil, pojďme se krok po kroku podívat, co přesně dělá tohle jednoduché přiřazení:

jazyk = 'python'

Nejdřív se vyhodnotí výraz za rovnítkem. Výsledek vyhodnocení výrazu je vždycky nějaký objekt; v našem případě řetězec 'python'. Ukážeme si ho takhle:

                ╔══════════╗
                ║ 'python' ║
                ╚══════════╝

Teď, když má hodnotu výrazu, podívá se Python na jméno před rovnítkem, a zařídí, aby na tu hodnotu „ukazovalo“.

┌───────┐       ╔══════════╗
│ jazyk ├──────→║ 'python' ║
└───────┘       ╚══════════╝

Voilà! Hodnota proměnné jazyk je odteď 'python'.

Pojďme si přiřadit další proměnnou:

rec = 'češ' + 'tina'

Opět se vyhodnotí výraz, vezmou se řetězce 'češ' a 'tina', sečtou se, a na výslednou hodnotu začne ukazovat proměnná rec:

┌───────┐       ╔══════════╗
│ jazyk ├──────→║ 'python' ║
└───────┘       ╚══════════╝
┌─────┐         ╔═══════════╗
│ rec ├────────→║ 'čeština' ║
└─────┘         ╚═══════════╝

Že to není zas tak složité?

Teď zkusíme jednu proměnnou „přiřadit“ do druhé:

jazyk = rec

Opět se nejdřív vyhodnotí výraz za rovnítkem. Výsledek bude objekt, který je v proměnné rec. A proměnná jazyk začne jednoduše ukazovat na tento objekt:

┌───────┐       ╔══════════╗
│ jazyk ├───┐ ×→║ 'python' ║
└───────┘   │   ╚══════════╝
┌─────┐     └──→╔═══════════╗
│ rec ├────────→║ 'čeština' ║
└─────┘         ╚═══════════╝

Tady je důvod, proč říkám že proměnné v Pythonu jsou jména. Jeden objekt může mít několik jmen, ale pořád je to ten samý objekt.

Řetězec 'python' teď žádné jméno nemá. Nedá se k němu nijak dostat1, a tudíž s ním dál nemůžeme nijak pracovat. Jediné co můžeme dělat je vytvořit nový objekt se stejnou hodnotou. Takovéhle sirotky Python časem smaže, aby nezabíraly paměť počítače:

┌───────┐
│ jazyk ├───┐      * poof *
└───────┘   │
┌─────┐     └──→╔═══════════╗
│ rec ├────────→║ 'čeština' ║
└─────┘         ╚═══════════╝

Teď, když víme jak fungují proměnné, se můžeme podívat na zoubek jejich hodnotám, tedy objektům. Další článek v sérii nám poví o Měnění objektů.


Zdroje a další materiály


  1. Tohle je zjednodušení; řetězce co se vyskytují přímo v kódu jsou (v CPythonu) součástí modulu, takže se k nim nějak dostat dá, a budou “žít” dál. Podrobněji to plánuju rozeberat v článku identity a hodnoty

,