Добавить в корзинуПозвонить
Найти в Дзене
Креативный дизайн

Погружение в Python: Передача неизменяемых объектов в функцию

Одной из важных особенностей Python является его система управления памятью и особенности работы с различными типами данных. Характерной чертой является то, как функции взаимодействуют с неизменяемыми объектами. В этой статье мы обсудим, как передача неизменяемых объектов — таких как целые числа (int) и строковые значения (str) — происходит "под капотом", и как это влияет на ваше программирование. В Python все параметры передаются по значению, но что именно это означает? Напротив хорошо известной концепции передачи по значению или по ссылке из других языков программирования, в Python это означает передачу ссылки на объект. Это важно для понимания: когда вы передаёте объект в функцию, вы фактически передаете ссылку на него, а не его копию. Давайте посмотрим, как это работает на примере с неизменяемыми типами данных. Рассмотрим пример, в котором мы передаём целое число в функцию и изменяем его внутри функции. Когда вы изменяете значение неизменяемого объекта внутри функции, результатом б
Оглавление

Одной из важных особенностей Python является его система управления памятью и особенности работы с различными типами данных. Характерной чертой является то, как функции взаимодействуют с неизменяемыми объектами. В этой статье мы обсудим, как передача неизменяемых объектов — таких как целые числа (int) и строковые значения (str) — происходит "под капотом", и как это влияет на ваше программирование.

Как аргументы передаются внутрь функции?

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

Передача неизменяемых объектов типа int

Рассмотрим пример, в котором мы передаём целое число в функцию и изменяем его внутри функции.

-2

Расшифровка строчек кода:

  • def modify_number(num): — определяет функцию с одним аргументом num.
  • print(f'ID before modification: {id(num)}') — выводит идентификатор памяти, где хранится объект перед модификацией.
  • num += 10 — создаётся новый объект с новым значением и изменённый num теперь ссылается на этот новый объект.
  • print(f'ID after modification: {id(num)}') — выводит идентификатор памяти нового объекта.
  • n = 5 — создаётся целочисленная переменная n.
  • modify_number(n) — вызывает функцию и передает ей n.
  • print(n) — выводит n, её значение осталось неизменным — 5. В итоге параметры функции и переменные будут ссылаться на один и тот же объект в памяти.

Результат работы кода:

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

Что происходит при создании нового
объекта?

Когда вы изменяете значение неизменяемого объекта внутри функции, результатом будет создание нового объекта. Это связано с тем, что объекты int в Python являются неизменяемыми, и любое изменение ведет к созданию новой версии объекта:

-4

Расшифровка строчек кода:

  • def demo(num): — определяет функцию, получающую параметр num.
  • num = num * 2 — создаёт новый объект с удвоенным значением и привязывает его обратно к num. Изменяя внутри функции параметры, мы получаем создание нового объекта. А значение переменной не изменяется. А изменяется появление нового объекта параметра функции, который будет указывать уже на новый только что созданный объект.
  • x = 3 — переменной x присваивается значение 3.
  • demo(x) — передает x функции demo.
  • print(x) — выводит x, которое не изменилось и равно 3.

Результат работы кода:

-5

Внутри функции мы не можем изменить внешние переменные. Значение не может измениться, которое находится вне функции.

Рекомендации по усовершенствованию кода

  1. Документируйте код: добавляйте комментарии к ключевым строкам кода для улучшения читаемости.
  2. Используйте понятные имена функций и переменных: это облегчит понимание того, что делает ваш код.
  3. Будьте внимательны с изменяемыми и неизменяемыми объектами: понимание, какие объекты вы изменяете, защитит вас от неожиданных побочных эффектов.

Заключение

Понимание работы с неизменяемыми объектами при передаче их в функцию — фундаментальный аспект для Python-разработчиков. Хотя изменения внутри функции создают новые объекты, понимание идентификаторов объектов позволит избежать распространённых ошибок и писать более безопасный и чистый код. Запомните: если вы хотите изменять переменные прямо внутри функций и видеть изменения за пределами этой функции, используйте изменяемые объекты, такие как списки или словари.

Полезные ресурсы:

Креативный дизайн | Дзен

Сообщество дизайнеров в VK

https://vk.com/grafantonkozlov

Телеграмм канал сообщества

https://t.me/grafantonkozlov

Архив эксклюзивного контента

https://boosty.to/antonkzv

Канал на Дзен

https://dzen.ru/grafantonkozlov

---------------------------------------

Бесплатный Хостинг и доменное имя

https://tilda.cc/?r=4159746

Мощная и надежная нейронная сеть Gerwin AI

https://t.me/GerwinPromoBot?start=referrer_3CKSERJX

GPTs — плагины и ассистенты для ChatGPT на русском языке

https://gptunnel.ru/?ref=Anton

---------------------------------------

Донат для автора блога

dzen.ru/grafantonkozlov?donate=true