Чем мутабельные объекты отличаются от иммутабельных?
В python объекты бывают мутабельные и иммутабельные. Значние иммутабельного объектра нельзя изменить после того, как он был создан, а значение мутабельного можно.
Рассмотрим на примере. В Python есть встроенная функция
Почему так? Строка иммутабельна, то есть, после того, как она уже создана, нельзя изменить ее содержимое. Поэтому интерпретатор перезаписывает ее по новому адресу с новыми символами. А список мутабелен, поэтому его адрес не меняется оттого, что мы заменили один элемент.
Вот какие встроенные типы есть в python:
Важно отличать мутабельность от иммутабельности, так как некоторые типы данных, например, dict или set, реализованы как хэш-таблицы. Когда вы добавляете элемент в множество, интерпретатор берет хэш от этого элемента и размещает значение по адресу, который совпадает с хэшом. Если мы попытаемся положить список в множество, то получим TypeError, потому что хэш бы изменился, когда изменился бы один из элементов списка:
#перед_собесом #основы #типы_данных #мутабельность #иммутабельность
В python объекты бывают мутабельные и иммутабельные. Значние иммутабельного объектра нельзя изменить после того, как он был создан, а значение мутабельного можно.
Рассмотрим на примере. В Python есть встроенная функция
id()
. В реализации CPython она возвращает адрес, по которому объект находится в памяти. Создадим список и посмотрим, в ячейке с каким номером он окажется. >>>beatles = [“Ringo”, “Paul”, “John”, “George”]
>>>id(beatles)
140181376779336
Видим, что список лежит по адресу 140181376779336. Теперь изменим какой-нибудь элемент списка и посмотрим, изменился ли адрес.>>>beatles[0] = “Pete”
>>>beatles
[“Pete”, “Paul”, “John”, “George”]
>>>id(beatles)
140181376779336
Видим, что адрес списка не меняется, если мы изменяем элементы, которые в него входят. Теперь создадим в памяти строку >>>bass = "Paul"и добавим в нее что-нибудь
>>>id(bass)
140068833595776
>>>bass += " McCartney"
>>>bass
Paul McCartney
>>>id(bass)
140068833600432
Видим, что адрес строки изменился. Почему так? Строка иммутабельна, то есть, после того, как она уже создана, нельзя изменить ее содержимое. Поэтому интерпретатор перезаписывает ее по новому адресу с новыми символами. А список мутабелен, поэтому его адрес не меняется оттого, что мы заменили один элемент.
Вот какие встроенные типы есть в python:
Класс Описание Мутабелен?Количество встроенных иммутабельных типов в python больше, но если вы захотите создать свой класс, он будет мутабельным.
---------------------------------
bool булевый тип ☹️
int целочисленный тип ☹️
float число с плавающей запятой ☹️
list список ☺️
tuple кортеж ☹️
str строка ☹️
set множество ☺️
dict словарь ☺️
Важно отличать мутабельность от иммутабельности, так как некоторые типы данных, например, dict или set, реализованы как хэш-таблицы. Когда вы добавляете элемент в множество, интерпретатор берет хэш от этого элемента и размещает значение по адресу, который совпадает с хэшом. Если мы попытаемся положить список в множество, то получим TypeError, потому что хэш бы изменился, когда изменился бы один из элементов списка:
TypeError: unhashable type: 'list'Поэтому мутабельные объекты, такие как словари или списки, не могут быть ключами в словаре или элементами множества. А вот строки или числа могут. И это на самом деле очень естественно🐍
#перед_собесом #основы #типы_данных #мутабельность #иммутабельность
👍2🔥1