Переменной в Python называют имя, связанное со ссылкой на объект.
Визуально переменную можно представлять как имя и стрелочку. Если стрелочка изменяется, следует говорить, что «имя теперь ссылается на другой объект» или «мы изменили ссылку переменной». Говорить просто «переменная изменилась» допустимо, но, чтобы не возникало путаницы, лучше явно говорить про ссылку/стрелочку. Так становится явным то, что изменение не затронуло сам объект.
Объект — это данные, лежащие в оперативной памяти. У объекта есть тип и значение. Например, выражение 1 даёт нам объект типа int со значением один.
Визуально любой объект можно представлять как область в оперативной памяти, в которой хранится тип объекта и значение объекта.
Тип уже созданного объекта никак нельзя изменить. Значение некоторых объектов тоже никак нельзя изменить, и нужно запомнить, какие объекты неизменяемы. Начнём с того, что нельзя изменить объекты вот с этими типами: int, float, str, bool.
Так, если вы пишете такой код:
a = 1
a = a + 1Смысл его такой:
На первой строке мы получили объект типа int со значением один и создали переменную a, которая на него ссылается.
На второй строке, во-первых, в результате вычисления выражения a + 1 мы получили новый объект, с типом int и значением два. Во-вторых, мы изменили ссылку переменной a: теперь она указывает не на объект 1, а на объект 2. При этом мы никак не изменяли сами объекты.
То же самое относится к любым операциям со строками: объект типа str не может быть изменён.
a = "Hello"
b = a + " World!" # объект, на который ссылается `a` остался неизменнымВажно понимать, что управление переменными и объектами происходит очень небольшим количеством способов — небольшим количеством механизмов языка. Сейчас мы рассмотрели
- Получение объектов через вычисление выражений (примеры таких выражений:
1,a + 1). Результат вычисления лежит в оперативной памяти и доступен нам как объект. - Создание или изменение ссылки переменной через присваивание (в общем виде,
имя = выражение, напримерa = 1,a = 1 + 2)
И, в целом, эти два механизма будут нас сопровождать при разработке на Python постоянно, потому важно уметь бегло считывать использование этих механизмов при чтении кода: видеть их и понимать, что именно они делают.
Задания
Задание 1
name = "Tom"
age = 20
message = name + " is " + str(age)
age = age + 1
name = name + " Smith"
final_message = name + " is " + str(age)Попробуйте самостоятельно подробно объяснить, что происходит на каждой строке:
- Какие объекты вычисляются (с какими типами и значениями)?
- Какие переменные создаются? Какие переменные начинают ссылаться на другой объект?
- На какие объекты ссылаются переменные name, age, message и final_message после каждой строки?
- Изменяется ли какой-нибудь уже существующий объект?
Задание 2
Напишите программу на Python которая создаёт следующие имена и объекты:
И после этого с помощью функции print выведите в консоль все объекты которые вы сделали.