В Python все является объектом! Объект может быть буквой, словом, числом или чем-то более сложным, например кортежем (который представляет собой структуру данных). Python - это объектно-ориентированный язык программирования, а это означает, что он представляет все свои данные как объекты, и программисту разрешено манипулировать объектом на основе его изменчивости.

id () и type ()

Все объекты в Python имеют уникальный идентификатор, хранящийся где-то в памяти, и этот номер остается постоянным в течение всего срока службы. Чтобы найти идентификатор объекта, нам нужно использовать функцию id().

>>> a = 1
>>> id(a)
140707381805328

Здесь у нас есть переменная a, и мы присваиваем ей номер 1. Затем мы можем передать переменную a в функцию id(), чтобы найти ее уникальный идентификационный номер. У каждого объекта есть не только идентификатор, но и тип данных. К счастью, найти тип данных объекта легко с помощью функции type().

>>> type(a)
<class 'int'>

И, как мы видим, после использования type() выяснилось, что переменная a является целым числом.

Мутабельные объекты

Изменяемый объект - это объект, который можно изменить после его создания. Вот некоторые примеры изменяемых объектов: списки, наборы и словари.

>>> l = [1, 2, 3, 4]
>>> type(l)
<class 'list'>
>>> print(l)
[1, 2, 3, 4]
>>> l[0] = 5
>>> print(l)
[5, 2, 3, 4]

Выше у нас есть список с именем l, содержащий числа один, два, три и четыре. Затем мы печатаем список l, просто чтобы дважды проверить, содержит ли он числа от 1 до 4. Затем мы решаем, что хотим вместо этого изменить номер один на пять, поэтому мы используем l[0]. И, наконец, мы успешно изменили первый индекс списка с 1 на 5.

Неизменяемые объекты

Неизменяемый объект - это объект, который нельзя изменить после того, как он был создан. Вот некоторые примеры неизменяемых объектов: целые числа, числа с плавающей запятой, логические значения, строки и кортежи.

>>> s = "Can't change me :)"
>>> type(s)
<class 'str'>
>>> s[0] = "But I'll still try"
Traceback (most recent call last):
...
TypeError: 'str' object does not support item assignment

В приведенном выше примере мы попытались изменить строку s, изменив ее первый индекс с помощью s[0]. И как и ожидалось, мы получили ошибку при попытке изменить значение строки.

Аргументы и объекты

На данный момент мы знакомы с функциями, поскольку мы использовали некоторые из них выше (id() и type()), но, чтобы быть явным, функции принимают аргументы, также известные как параметры (или объекты), для выполнения строк кода внутри функция. Ниже у нас есть функция с именем add_color(), которая принимает один параметр c и использует функцию append() для добавления строки blue в список цветов.

>>> def add_color(c):
        c.append("blue")
>>> colors = ["red", "green", "yellow"]
>>> add_color(colors)
>>> print(colors)
['red', 'green', 'yellow', 'blue']

Хотя строка blue является неизменяемым объектом, мы можем добавить ее в наш список цветов, потому что список colors является изменяемым объектом.

Как Python обрабатывает изменяемые и неизменяемые объекты? А какое это имеет значение?

Изменяемые и неизменяемые объекты обрабатываются в Python по-разному. Изменяемые объекты могут изменить свои значения без изменения их идентификатора в памяти. Однако неизменяемые объекты не могут изменить свои значения без изменения их идентификатора. Когда дело доходит до управления памятью, изменяемые объекты более эффективны, чем неизменяемые объекты, потому что неизменяемые объекты требуют создания копии, чтобы «изменить» их. Важно понимать разницу между изменяемыми и неизменяемыми объектами, чтобы не тратить впустую память, используя неправильные типы данных.