@MarkLee21

Что такое типы данных и в каких случаях лучше использовать определённый тип данных?

Здравствуйте. Недавно начал изучать язык программирования Python по видеоматериалам и статьям из сайтов.

Я узнал о таких типах данных, как:
1) bool
2) string(str)
3) integer(int), float, complex
4) list, tuple, dictionary
5) set, frozenset
6) none
7) bytes, bytearray, memoryview
8) range

Числовые типы нужны для математических операций. Строки нужны для хранения текстовой информации.
Списки нужны для хранения и изменения элементов разных типов данных. Кортежи по сути тоже, что и списки, но защищены от изменений. Булевый тип является примитивным типом данных со значением истина или ложь. Словари нужны для доступа к элементу по ключу. Множества нужны для хранения уникальных элементов, но frozenset является неизменяемым множеством. None это просто пустой тип данных для обозначения пустой функции, переменной и т.д.

Что в общем такое типы данных и в каких случаях лучше использовать определённые типы данных, например frozenset или tuple, если можно просто создать кортеж с уникальными элементами?

Если я не прав в своём вопросе, то извиняюсь за ошибки. Руководствовался картинкой, прикреплённой к вопросу.63eab67b3be9e065912282.jpeg
  • Вопрос задан
  • 265 просмотров
Решения вопроса 2
drygdryg
@drygdryg
Python-разработчик
В Python все типы данных делятся на изменяемые (англ. mutable) и неизменяемые (англ. immutable). Неизменяемые типы данных (например, строка, кортеж, frozenset) имеют несколько особенностей:
- занимают меньше места в памяти, чем их изменяемые аналоги;
- являются хэшируемыми (англ. hashable).
Хэшируемые типы данных в отличие от нехэшируемых можно использовать в качестве ключей словарей, а также они могут быть элементами множеств.
>>> a_set = frozenset({1, 2, 3})
>>> hash(a_set)
-272375401224217160
>>> a_list = [1, 2, 3]
>>> hash(a_list)  # Ошибка: список - нехэшируемый тип данных
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a_dict = {[1, 2, 3]: 'example_value'}  # Ошибка: нельзя использовать нехэшируемые типы данных как ключи словаря
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
>>> a_dict = {(1, 2, 3): 'example_value'}  # но можно использовать хэшируемые
>>> a_dict
{(1, 2, 3): 'example_value'}

Неизменяемые типы данных имеют меньший размер (объём занимаемой оперативной памяти):
>>> import sys
>>> sys.getsizeof([1, 2, 3])  # Изменяемый тип данных list
88
>>> sys.getsizeof((1, 2, 3))  # Неизменяемый тип данных tuple
64


Вывод: используйте неизменяемые аналоги изменяемых типов данных тогда, когда вы хотите оптимизировать быстродействие своей программы и точно знаете, что вам никогда не потребуется изменять значения внутри структуры данных (например, когда вы получаете данные из внешнего источника по протоколу HTTP и читаете их), либо когда данные нужно использовать в качестве ключа словаря или использовать внутри множества.
Ответ написан
Комментировать
@Jack444
Любой тип это класс, через классы можно реализовать любой тип какой пожелаешь.

вот например в базе postgresql есть тип smalllint размером в 2 байта и туда записать можно значение в диапазоне от -32768 до 32767, чтобы контролировать это на уровне питона можно свой тип сделать
class int2(int):

    def __init__(self, x) -> None:
        if not -32768 <= x <= 32767: raise TypeError
        super().__init__()
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы