Каждые данные Python — это объект! Что я имею в виду? Давай выясним.

В официальной документации говорится, что «Объекты — это абстракция данных Python». 😅 Смысл? Чтобы понять такое утверждение, давайте узнаем, что на самом деле означает абстракция. Абстрактное означает «просто идея, но не как физическая вещь». Проще говоря, без знания всех деталей того, как что-то можно сделать, абстракция — это способ представить идею. Таким образом, утверждение «Объекты — это абстракция данных Python» означает, что «язык Python использует концепцию объектов для представления всех своих данных».

Достаточно просто? Давайте двигаться дальше.

Теперь мы знаем, что каждое представление данных может быть понято с помощью лежащего в его основе представления объекта. Итак, если мы создадим целочисленную переменную в python, она будет называться целочисленным объектом. То же самое относится ко всем различным переменным и типам данных, которые вы можете создать или придумать.

Всякий раз, когда мы создаем объект, мы связываем с ним 3 свойства.

  1. Стоимость объекта
  2. Местоположение или личность объекта
  3. Тип объекта

Например, когда мы определяем: A = 10, у нас есть все эти 3 свойства, связанные с ним. Обратите внимание, что A — это просто переменная (ссылка/указатель), а не объект. 10 - это объект. В python 10 (объект) сначала создается в сегменте кучи (поскольку это глобальная переменная), а затем создается ссылочная переменная «A», которая указывает на адрес памяти, где создается 10. Таким образом, A — это просто ссылка на объект. Тот же принцип соблюдается для каждого объекта Python.

При создании «10» 3 свойства определяются следующим образом:

  1. Стоимость: 10
  2. Местоположение: 0x238A352 (некоторый адрес памяти)
  3. Тип: целое число

По этой причине python создает только один объект из 10. Если позже вы создадите другую переменную с тем же значением, адрес из 10 снова присваивается новой переменной без необходимости создавать другой объект с тем же значением. В реализации CPython есть встроенный метод id(variable/object), который просто определяет адрес памяти переменной/объекта. давайте посмотрим на следующий пример кода.

Это показывает «a», «10» и «c», все они имеют одну и ту же ячейку памяти. Это показывает, что был создан только 1 экземпляр из 10, а затем он был назначен «a» и «c».

Python позволяет нам сравнивать два значения с помощью оператора ‘==’. Однако, чтобы сравнить, указывают ли две переменные на одну и ту же ячейку памяти, мы должны использовать оператор is.

Здесь, когда мы делаем a == c, значения сравниваются. Однако, когда мы делаем a is c, выполняется внутреннее сравнение id(a) == id(c).

Наряду с идентификацией/местоположением объекта тип объекта помогает определить операции, ограничения и методы, связанные с объектом. Например, длина может быть рассчитана для строкового объекта, но не для типа float или integer.

Объекты, значения которых могут быть изменены, называются изменяемыми объектами, а объекты, значения которых нельзя изменить после создания, называются неизменяемыми объектами. Однако неизменность — это не просто сущность неизменяемых объектов, это нечто более тонкое. Давайте возьмем пример, чтобы объяснить, что я имею в виду.

В официальной документации Python указаны следующие типы данных.

Теперь рассмотрим следующую программу…

если мы видим, у нас есть объект кортежа, и он содержит объект списка. Это пример неизменяемого контейнера (контейнер — это объект, который может содержать ссылки на другие объекты), содержащего изменяемый объект. Мы можем изменить внутренний список, но мы не можем изменить неизменяемый контейнер, который его содержит. Даже если вам может показаться, что кортеж изменился, изменился не кортеж, а изменяемый объект внутри него. Вот почему Python является живым языком, потому что он может позволить вам такое сложное поведение более тонким способом.

Обучение всегда окупается. Будьте терпеливы и продолжайте учиться. 📚

Если вы получили пользу от этой статьи, поделитесь ею в социальных сетях. 😃