Как вы знаете, в питоне все является объектом, и этот объект может быть изменяемым или неизменяемым, но что это означает?

Прежде чем начать говорить об этих концепциях, давайте сделаем краткий обзор того, что такое id. В C мы используем амперсанд, чтобы получить адрес памяти для переменной (см. Изображение 1), поэтому в python, если мы используем встроенный идентификатор функции, мы сможем увидеть адрес памяти объекта (см. Изображение 2) .

Как мы видим, id(a) дает нам место в памяти для объекта a, hex(id(a)) — это просто место в памяти в шестнадцатеричной форме. Кроме того, мы можем найти разницу между C и Python, в C a является переменной типа integer, однако в python, поскольку все является объектом с type(), мы можем получить тип класса для объекта , в данном случае это объект класса int.

Имея это в виду, в питоне в зависимости от типа объекта они могут быть изменяемыми или неизменяемыми, поэтому давайте, наконец, объясним, что это такое.

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

Строка является одним из неизменяемых объектов в Python, поэтому, если мы попытаемся изменить значение для этого объекта a, создается впечатление, что мы изменили значение для a, но что произошло на самом деле было то, что мы создали новый объект, мы можем проверить это, проверив адрес памяти a до и после изменения, когда a был «Hello World», адрес памяти был другой, когда a был «Hello», даже если мы изменим значение обратно на предыдущее «Hello World», адрес памяти также будет другим.

Теперь давайте поговорим об изменяемых объектах, на изображении 4 мы видим, что мы создали список типов объектов с именем list, который является одним из изменяемых объектов в python, поэтому, если мы изменяем значения в списке, мы действительно делаем это без создание нового объекта, как это произошло со строковым объектом. Проверяя адрес памяти до и после модификации, мы видим, что это точно такой же адрес.

Внутри python то, что делается под прикрытием с неизменяемыми объектами, дает другое пространство памяти для объекта a(Image 3), потому что это новый, это не тот же объект, и вот почему они называются неизменяемыми. Отличие от C в том, что в python мы не можем манипулировать указателями, это означает, что мы не можем получить доступ к этому конкретному месту в памяти и изменить значение по своему усмотрению, python имеет собственные встроенные функции для изменяемых объектов, которые делают это для нас и поэтому называется изменчивыми объектами.

Давайте проверим, что такое изменяемые и неизменяемые объекты в python.

Почему важно знать разницу между изменяемым и неизменяемым объектом?

Несмотря на то, что python обрабатывает память сам по себе, очень важно использовать правильный тип объектов для конкретной задачи, и это потому, что все, что вы делаете, — это затраты памяти, и нам всегда нужно поддерживать оптимизацию нашего приложения/программы.

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

Мы определили функцию с именем add, и эта функция будет добавлять + 1 к переданному значению, однако, как мы видим, этого не происходит, на данный момент вы должны знать ответ, причина в том, что a есть неизменяемый объект и его значение не могут быть изменены, адрес a тот же внутри функций add, но значение не может быть изменено, вместо этого был создан новый объект с результатом функций, в данном случае это объект b.

Твиттер: https://twitter.com/JhoanRodriguez_
Ссылка: https://www.linkedin.com/in/jhserohe/