Python словари изменяемый тип данных

Что такое изменяемые типы данных в Python

В Python абсолютно всё является объектом. При этом все типы объектов имеют очень важный отличительный признак: изменяемость. Некоторые объекты в Python являются изменяемыми (англ. mutable), а другие нет (англ. immutable). Это различие зачастую сильно путает начинающих Python-разработчиков, но сейчас мы попробуем устранить это затруднение. Из этой статьи вы узнаете, что собой представляют изменяемые типы данных в Python.

Какими бывают изменения в объектах Python

По сути, изменяемые типы данных в Python — это такие типы данных, значение которых можно изменить in-place (на месте) после их создания.

Это утверждение могло вызвать у вас еще два вопроса: что такое in-place и какие значения можно изменять в изменяемых типах данных. Давайте обсудим каждый из них.

1. Что такое изменение in-place (на месте)?

Под понятием “изменение in-place” мы подразумеваем любое изменение содержимого объекта без создания его отдельной копии. Например, мы можем напрямую добавлять, удалять или обновлять значения списка в Python, не создавая новый список.

lst = [12, 42, 21, 1] lst.append(99) print(lst) lst.extend([99, 88]) print(lst) # Результат: # [12, 42, 21, 1, 99] # [12, 42, 21, 1, 99, 99, 88]

Как видите, мы можем добавлять значения в наш список lst без необходимости создавать новый. То есть мы перезаписываем исходный список. Это операция in-place (на месте).

Читайте также:  Javascript add methods to class

2. Какие значения можно изменять в объектах изменяемого типа?

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

Изменяемые типы данных в Python

Обычно в Python выделяют три изменяемых типа данных:

Давайте вкратце обсудим каждый из них.

Списки в Python

Список в Python — это упорядоченная последовательность элементов, которая может быть изменена. Это означает, что мы можем изменить список, заменяя, добавляя и удаляя элементы. И для всего этого нам не нужно создавать новую копию уже существующего списка. Рассмотрим ниже несколько примеров.

# пример, демонстрирующий, что список является изменяемым типом данных в python # наш текущий список my_list = [1,2,3,4,5] # операция добавления в список my_list.append(10) # вывод результата в консоль print("List after appending a value = ", my_list) # операция расширения списка (добавление нескольких элементов) my_list.extend([6,11,23]) # вывод результатов в консоль print("List after extending a list = ", my_list) # удаление элемента списка my_list.remove(3) # вывод результатов в консоль print("List after removing a value wp-block-preformatted">List after appending a value = [1, 2, 3, 4, 5, 10] List after extending a list = [1, 2, 3, 4, 5, 10, 6, 11, 23] List after removing a value = [1, 2, 4, 5, 10, 6, 11, 23]

Объяснение. Мы показали возможность добавлять и удалять элементы из существующего списка:

  • Сначала мы создаем произвольный список
  • Затем мы добавляем элемент в наш список и выводим его в консоль
  • Далее расширяем наш список сразу на несколько элементов и удаляем определенные элементы

Все выполненные изменения были отражены в результатах работы кода. Таким образом, мы можем заключить, что списки в Python являются изменяемыми.

Мы также можем изменить значения элементов списка, используя оператор присваивания. Например, рассмотрим следующий код:

  • Поскольку множества по своей природе неупорядочены, мы не можем применять к ним индексацию
  • Мы не можем использовать операторы индекса или операторы среза для извлечения (доступа) или изменения элементов множества, на самом деле сам тип данных set не поддерживает такие операции
  • Однако мы можем добавлять или удалять любой элемент и обновлять множество. Добавление элементов можно выполнить с помощью метода add(). Операции обновления можно выполнять с помощью метода update(). Для удаления элементов из множества используется метод remove().

Set after adding a value : Set after updating some values : Set after removing a value :

Объяснение. В приведенном выше примере мы добавили и удалили некоторые значения из нашего множества. Обратите внимание, что результат каждый раз находится в неупорядоченном виде. Это основная причина, по которой мы не можем использовать индексирование для изменения произвольного элемента множества: положение любого элемента не является фиксированным.

Удалить элементы из множества можно также при помощи методов pop() и clear() . В последнем случае будут удалены все элементы.

Словари в Python

Словарь в Python — это неупорядоченный набор элементов. Каждый элемент словаря представляет собой пару ключ-значение. По ключу мы можем получить доступ к определенному значению. Ключи в словарях уникальны по своей природе.

Примечание редакции: о поиске ключей словаря по значениям читайте в статье “Как получить ключ по значению в словаре в Python”.

Словарь в Python — это изменяемый тип данных. Это означает, что мы можем добавлять и удалять элементы из словаря, а также менять их значения, используя оператор присваивания.

Добавление элементов может быть выполнено при помощи ключей словаря. Если элемент с таким ключом уже присутствует, то будет просто обновляться его значение. Удаление элементов из словаря можно выполнить при помощи функций pop() , popitem() , clear() или del() .

Давайте рассмотрим несколько примеров:

# пример, демонстрирующий, что словари являются изменяемым типом данных в Python # наш текущий словарь my_dict = # добавляем в словарь новую пару ключ-значение my_dict['Country'] = "India" # вывод результата в консоль print("Dictionary after adding a new key-value pair = ",my_dict) # обновляем пару ключ-значение my_dict['state'] = "West Bengal" # выводим результаты в консоль print("Dictionary after updating an existing key value pair = ",my_dict) # удаляем пару ключ-значение my_dict.pop('Capital') # выводим результаты в консоль print("Dictionary after popping out a key value pair = ",my_dict) # удаляем все пары ключ-значения my_dict.clear() print("After clearing the whole dictionary wp-block-preformatted">Our original dictionary = Dictionary after adding a new key value pair = Dictionary after updating an existing key value pair = Dictionary after popping out a key value pair = After clearing the whole dictionary = <>

Объяснение. В приведенном выше примере мы выполнили такие операции, как добавление, обновление и удаление элементов из нашего словаря. Это доказывает, что словарь является изменяемым типом данных в Python.

Сравнение изменяемых и неизменяемых объектов

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

Прежде чем обозначить различия между ними, давайте сначала вкратце рассмотрим неизменяемые объекты в Python.

Проще говоря, значение неизменяемого типа, присвоенное переменной, не может быть изменено. Например, строка (string) — это неизменяемый тип данных в Python. Мы не можем изменить ее содержимое, а если попытаемся, то получим ошибку TypeError. Чтобы присвоить строке новое значение, нужно создать новый объект данного типа.

Python обрабатывает изменяемые и неизменяемые объекты совершенно по-разному. Давайте рассмотрим различия между этими типами объектов:

Изменяемые объекты Неизменяемые объекты
Изменяемый объект может быть изменен после его создания Неизменяемый объект не может быть изменен после его создания
Примеры: список, набор, словарь Примеры: кортежи, целое число (int), число с плавающей запятой (float), логическое значение (bool), frozenset.
Изменяемые объекты не считаются потокобезопасными по своей сути Неизменяемые объекты считаются потокобезопасными по своей сути
Доступ к изменяемым объектам медленнее по сравнению с неизменяемыми Доступ к неизменяемым объектам быстрее, чем к изменяемым
Изменяемые объекты полезны, когда нам нужно изменять размер или содержимое нашего объекта Неизменяемые объекты лучше всего подходят, когда мы уверены, что нам не понадобится их изменять
Изменение изменяемых объектов — более дешевая операция, чем создание новых, с точки зрения памяти и времени Изменение неизменяемых объектов — дорогостоящая операция, так как она включает создание новой копии для любых внесенных изменений

Заключение

Из этой статьи вы узнали, что такое изменяемые типы данных в Python. Давайте вкратце повторим самые важные моменты:

  • Объекты в Python могут быть как изменяемыми, так и неизменяемыми.
  • Изменяемые типы данных — это такие типы, элементы которых могут быть изменены или им могут быть присвоены новые значения.
  • Списки, множества и словари являются примерами изменяемых типов данных в Python.
  • Неизменяемые типы данных — это такие типы, значения которых не могут быть изменены после их создания. Примерами неизменяемых типов данных в Python являются типы int (целые числа), str (строки), bool (логический тип данных), float (числа с плавающей запятой), tuple (кортежи) и т. д.
  • Мы должны использовать изменяемые объекты всякий раз, когда уверены, что размер наших данных может меняться. И напротив, неизменяемые типы предпочтительнее, когда мы используем данные постоянного размера. Это связано с тем, что внесение изменений в неизменяемый тип данных является дорогостоящей операцией.

Источник

Оцените статью