Python — это полностью объектно-ориентированный язык программирования. Отсюда и возникает довольно известный факт, который гласит, что в нем все данные — это объекты, которые могут быть встроены на уровне языка или объявлены вручную.
Объекты — это экземпляры класса и основные строительные блоки любой программы, которым отводится некоторая область памяти для хранения в них данных. Так, например, когда мы пишем в коде «x = 5», мы создаем экземпляр класса int
со значением 5 и присваиваем его переменной x
. Теперь x
— это объект типа int
.
На картинке ниже наглядно видно структуру программ, написанных на Python.
Все объекты имеют свои уникальные типы данных (int
, string
, list
и т.д.) и создаются с использованием конструкторов соответствующих классов. Классы, в свою очередь — это механизмы, определяющие поведение объектов благодаря уникальным атрибутам и методам. Их еще можно назвать макетами для создания объектов.
В данной статье мы рассмотрим, какие типы данных есть в Python, и поговорим об особенностях каждого из них.
Переменные в Python — это названия для области памяти вычислительной машины, в которых впоследствии будут храниться самые разные значения. У каждой переменной в коде обязательно есть свой тип данных, который указывает интерпретатору на то, что можно хранить в этой переменной, и какое количество памяти нужно выделить для нее.
Объявление переменной выглядит следующим образом:
x = 10
В первую очередь мы указываем имя переменной, затем ставим знак равенства, а после него передаем значение, которое и будет присвоено указанной переменной.
У каждой переменной есть свой адрес в памяти. Определить его можно, используя функцию id()
:
x = 10
print(id(x))
Для переменной x
из примера выше будет вот такой адрес:
Также в Python существует функция type()
, благодаря которой мы можем узнать тип данных, выбранный для конкретной переменной:
x = 10
print(type(x))
Как видно по картинке ниже, для x был определен целочисленный тип данных.
Процесс определения типа данных называется типизацией. Она бывает двух видов: статическая и динамическая. В Python используется второй вариант. Именно поэтому при использовании одной и той же переменной она может представлять объекты совершенно разных типов данных. Например:
first_example = 'Привет'
print(type(first_example))
first_example = 100
print(type(first_example))
first_example = 3.14
print(type(first_example))
Во всех случаях вызова print
, мы увидим разный результат. Он показан на картинке ниже.
В данном разделе мы рассмотрим все основные типы данных в языке программирования Python. Их можно разделить на две группы: неизменяемые и изменяемые объекты.
Неизменяемые объекты — это те объекты, чье состояние и содержимое нельзя изменить. При попытке изменить значение подобных объектов будет создаваться новый объект с указанным значением и тем же именем. К неизменяемым относятся объекты типа число, строка или кортеж.
Изменяемые объекты — это те объекты, которые возможно изменить после их создания. К данной группе относятся объекты типа список, словарь или множества.
Чтобы проверить изменяемость объектов, воспользуемся функцией id()
, которую мы рассматривали немного ранее, и сравним адреса в памяти до внесения изменений и после:
first_example = 50
second_example = [50, 100, 150]
print(f'Адрес в памяти до изменения объекта int = {first_example} : {id(first_example)}')
print(f'Адрес в памяти до изменения объекта list = {second_example} : {id(second_example)}')
first_example += 50
second_example += [200]
print(f'Адрес в памяти после изменения объекта int = {first_example} : {id(first_example)}')
print(f'Адрес в памяти после изменения объекта list = {second_example} : {id(second_example)}')
Результат работы программы продемонстрирован на картинке ниже.
Здесь видно, что при выполнении операции сложения с переменной типа int
, создается новый объект, имя которого сохраняется, а вот значение адреса в памяти нет. При добавлении нового значения в объект типа список, адрес в памяти не меняется, что подтверждает его изменяемость.
Данные свойства объектов необходимо учитывать, например, при работе с функциями. В качестве аргументов функции лучше использовать копии изменяемых объектов, чтобы не повредить оригинал.
В следующих подразделах мы рассмотрим типы данных в языке Python более детально.
В первую очередь рассмотрим тип данных «числа» в Python.
Ниже представлена таблица, содержащая название и описание числового типа данных, а также его обозначение и примеры. Кроме того, сюда был добавлен логический тип данных.
Тип данных |
Описание |
Обозначение |
Пример |
Целые числа |
Положительные и отрицательные числа без дробной части. |
int |
example1 = 5 example2 = -1234 |
Числа с плавающей точкой |
Положительные и отрицательные числа с дробной частью. |
float |
example3 = 3.14 example4 = -43.4132 |
Комплексные числа |
Числа в формате: a + bj, где a и b — вещественные числа, а j — мнимая единица. Передача комплексных чисел происходит с использованием функции complex(). Чтобы отобразить вещественную часть, используется синтаксис: имя_переменной.real Чтобы отобразить мнимую часть, используется синтаксис: имя_переменной.imag |
complex |
example5 = complex(5,4) |
Логический |
Логический тип данных принимает всего 2 значения: True и False. Используется он зачастую для реализации ветвлений или установки флажков. |
bool |
example7 = True example8 = False |
Строковый тип данных предназначен для хранения текстовой информации или последовательности байтов. Чтобы объявить строку, необходимо воспользоваться одинарными, двойными либо тройными кавычками, как это показано в примере ниже:
example_srt1 = ‘Пример строки №1’
example_srt2 = “Пример строки №2”
example_srt3 = '''Пример строки №3'''
Как мы уже говорили раньше, строки относятся к неизменяемым объектам.
Списки в Python — это упорядоченные коллекции элементов, которые могут быть представлены различными типами данных. Они могут быть изменяемыми, что означает, что вы можете добавлять, удалять и изменять элементы в списке.
Объявление списка происходит за счет перечисления через запятую его элементов внутри квадратных скобок, как это показано в примере ниже:
example_list = [1, 5.7, 'hello']
Извлечение элементов из списка выполняется с использованием его индексов. Это может быть как один элемент, так и целый срез. Пример:
example_list = [1, 5.7, 'hello']
print(f'Третий элемент списка: {example_list[2]}')
print(f'Первый и второй элемент списка: {example_list[0:2]}')
Результат работы кода показан на картинке ниже.
Кортежи в Python — это те же списки, однако они в свою очередь неизменяемы. Их преимущество заключается в том, что интерпретатор работает с ними гораздо быстрее. Поэтому, если вам важно, чтобы ваша программа работала быстрее, а данные оставались неизменными — используйте кортежи.
Объявление кортежа происходит за счет перечисления через запятую его элементов внутри круглых скобок, как это показано в примере ниже:
example_tuple = (1, 5.7, 'hello')
Извлечение элементов происходит так же, как и у списков. Однако важно помнить, что изменить их не получится.
Словари — это неупорядоченная перечень пар в формате ключ-значение. Они предназначены для тех случаев, когда пользователю требуется обеспечить быстрый доступ к данным за счет использования соответствующего ключа.
Чтобы объявить словарь, необходимо перечислить данные в формате ключ-значение в фигурных скобках, как это показано в примере ниже:
example_dict = {
'name':'Peter',
'age':33,
'country':'Russia'
}
Важно помнить, что значения могут быть любого типа данных, а ключи только неизменяемыми.
Как мы и говорили, чтобы получить значение, используем соответствующий ключ:
example_dict = {
'name':'Peter',
'age':33,
'country':'Russia'
}
print(f'Peter from: {example_dict["country"]}')
print(f'His age: {example_dict["age"]}')
Результат работы программы продемонстрирован на картинке ниже.
Множество — это набор уникальных и неупорядоченных элементов неизменяемого типа.
Чтобы объявить множество, необходимо перечислить элементы через запятую в фигурных скобках, как это показано в примере ниже:
example_set = {1,2,3,4,5}
Если мы попробуем передать в множество дублирующиеся элементы, то интерпретатор автоматически удалит их. Например:
example_set = {1,2,3,4,5,1,2,3,4,5}
print(example_set)
В итоге, функция print(example_set)
выведет следующее:
Еще одна особенность множеств в том, что над ними можно выполнять ряд математических операций (объединение, разность, пересечение).
int
, string
, list
и т.д.) и создаются с использованием конструкторов соответствующих классов.