В Python любые данные являются объектами с определенным классом. Следовательно типы данных являются классами, а переменные — это экземпляры или объекты этих классов.
С помощью функции type()
можно определить к какому классу относится переменная:
my_str = 'строка'
my_list = ['один', 'два', 'три']
my_tuple = (1, 2, 3)
my_set = {1, 2, 3}
my_dict = {'Sasha': 35, 'Maxim': 30, 'Ivan': 20}
print(type(my_str))
print(type(my_list))
print(type(my_tuple))
print(type(my_set))
print(type(my_dict))
#<class 'str'>
#<class 'list'>
#<class 'tuple'>
#<class 'set'>
#<class 'dict'>
Так как Python является динамически типизированным языком, то здесь не нужно указывать, к какому типу данных будет относиться переменная.
Тип данных переменной определяется автоматически, во время присваивания значения переменной.
Это дает возможность использовать 1 переменную для разных типов данных. Переменная будет менять свой тип каждый раз, когда ей присваивается новый тип данных:
a = 100
print(type(a))
a = 'Текст'
print(type(a))
a = [1, 2, 3]
print(type(a))
#<class 'int'>
#<class 'str'>
#<class 'list'>
Конечно, сильно увлекаться этим не стоит, для новых данных лучше ввести новую переменную, чтобы потом не запутаться в своем же коде.
В Python типы данных делятся на 2 вида: атомарные и ссылочные.
Атомарные типы данных:
Ссылочные типы данных:
Отличия между ними в том, что атомарные типы данных при присваивании переменной, передаются по значению, а ссылочные типы данных при присваивании переменной передаются по ссылке.
Пример:
a = 1
b = a
a = 2
print(a)
print(b)
#2
#1
Здесь наглядно видно, что переменной b
было присвоено именно значение переменной a
, а не ссылка на область памяти.
Теперь возьмем ссылочный тип данных — список:
my_list = [1, 2, 3]
my_list_2 = my_list
my_list[0] = 0
print(my_list)
print(my_list_2)
#[0, 2, 3]
#[0, 2, 3]
Переменной my_list_2
мы присвоили значение переменной my_list
, т.е. список, далее изменили первый элемент списка (под 0 индексом) — это привело к тому, что значение переменной my_list_2
тоже изменилось.
Все потому, что это ссылочные типы данных и, мы передали ссылку на область памяти, а не само значение переменной.
Если нам нужно, чтобы значение в списке не менялось, то следует использовать метод list.copy()
, а не присваивание:
my_list = [1, 2, 3]
my_list_2 = my_list.copy()
my_list[0] = 0
print(my_list)
print(my_list_2)
#[0, 2, 3]
#[1, 2, 3]
К стандартным типам данных в Python относятся:
Разберем подробнее каждый тип данных.
Числовой тип данных представляет из себя:
Это числа без дробной части, могу быть, как положительными, так и отрицательными.
Целые числа имею тип данных int:
a = 200
b = -34
c = 0
print(type(a))
print(type(b))
print(type(c))
#<class 'int'>
#<class 'int'>
#<class 'int'>
Это числа с плавающей точкой, т.е. числа с дробной частью.
Вещественные числа имеют тип данных float:
a = 200.1543
b = -34.0
c = 0.9
print(type(a))
print(type(b))
print(type(c))
#<class 'float'>
#<class 'float'>
#<class 'float'>
Эти числа записываются в формате x+yj
, где x
— действительная часть, а y
— мнимая часть числа.
Комплексные числа имеют тип данных complex:
a = 1+2j
print(type(a))
#<class 'complex'>
Этот тип чисел применим в основном в сложных математических вычислениях и редко используется в обычных задачах.
Этот тип данных имеет только 2 значения: False
и True
(истина и ложь).
Также стоит заметить, что True и False обязательно пишутся с большой буквы, иначе вы получите ошибку NameError: name ‘true’ is not defined.
print(type(True))
print(type(False))
#<class 'bool'>
#<class 'bool'>
Строка — неизменяемая упорядоченная последовательность символов.
Строки имеют тип данных str:
my_str = 'текст'
print(type(my_str))
#<class 'str'>
Список — изменяемая и индексируемая последовательность любых элементов (даже смешанного типа).
Списки имеют тип данных list:
my_list = ['текст', 1, 100, -5.43]
print(type(my_list))
#<class 'list'>
Кортежи — неизменяемая и индексируемая последовательность элементов. В целом кортежи похожи на строки, только здесь нельзя изменять элементы последовательности.
Кортежи имеют тип данных tuple:
my_tuple = ('текст', 1, 100, -5.43)
print(type(my_tuple))
#<class 'tuple'>
Словари — неупорядоченный набор пар ключ:значение.
Словари имеют тип данных dict:
my_dict = {'ключ1':'значение1', 'ключ2':'значение2', 'ключ3':'значение3'}
print(type(my_dict))
#<class 'dict'>
Множества — неупорядоченный набор уникальных и неизменяемых элементов.
Множества имеют тип данных dict:
my_set = {1, 2, 3, 4}
print(type(my_set))
#<class 'set'>
Преобразование типов данных — это конвертация объекта из одного типа данных в другой.
В Python имеется 2 способа преобразования:
При неявном преобразовании Python самостоятельно конвертирует тип данных.
Пример:
a = 1
b = 2.2
a = a + b
print(a)
print(type(a))
print(type(b))
#3.2
#<class 'float'>
#<class 'float'>
У нас есть переменная a
, которая имеет тип int
, т.к. ей присвоено целое число. И есть переменная b
с типом данных float
.
После того, как мы сложили эти две переменные и эту сумму присвоили переменной a
— у нее изменился тип на float
.
Python всегда конвертирует меньший по диапазону тип данных в больший, чтобы избежать потери данных.
При явном приведении типов, программист сам меняет тип данных с помощью функций int()
, float()
, str()
и т.д.
Следует помнить, что при преобразовании типа данных функции для приведения типа не изменяет переданное значение, а возвращает новое значение другого типа.
Преобразовать х в целое число: int(х)
Поменяем тип float на int:
a = 10.8
b = int(a)
print(b)
print(type(a))
print(type(b))
#10
#<class 'float'>
#<class 'int'>
Нужно обратить внимание, что здесь не происходит округление числа, а просто отсекается дробная часть.
Преобразовать х в вещественное число: float(x)
Поменяем тип int на float:
a = 15
b = float(a)
print(b)
print(type(a))
print(type(b))
#15.0
#<class 'int'>
#<class 'float'>
Преобразовывать х в строку: str(x)
Поменяем тип int на str:
a = 15
b = str(a)
print(b)
print(type(a))
print(type(b))
#15
#<class 'int'>
#<class 'str'>
Преобразовать s в кортеж: tuple(s)
Поменяем тип str на tuple:
a = 'текст'
b = tuple(a)
print(b)
print(type(a))
print(type(b))
#('т', 'е', 'к', 'с', 'т')
#<class 'str'>
#<class 'tuple'>
Преобразовать s в список: list(s)
Поменяем тип str на list:
a = 'текст'
b = list(a)
print(b)
print(type(a))
print(type(b))
#['т', 'е', 'к', 'с', 'т']
#<class 'str'>
#<class 'list'>
Преобразовать s в словарь: dict(s)
Преобразуем список кортежей list в словарь dict:
a = [(1, 2), (3, 4)]
b = dict(a)
print(b)
print(type(a))
print(type(b))
#{1: 2, 3: 4}
#<class 'list'>
#<class 'dict'>
Содержание: