logo

Передача за посиланням проти значення в Python

Розробників, які переходять у програмування на Python з інших мов, таких як C++ і Java, часто бентежить процес передачі аргументів у Python. Об’єктно-орієнтована модель даних і її обробка призначення є причиною плутанини на фундаментальному рівні.

У статті ми обговоримо поняття як передати значення за посиланням у Python і спробуйте зрозуміти приклади передачі за посиланням в Python.

Зміст



Передача за значенням і передача за посиланням у Python

Можливо, ви захочете щось пробити після того, як прочитаєте вперед, тож наготуйтеся. Модель передачі аргументів Python ані Передача за значенням, ані Передача за посиланням, але це Передача за посиланням на об’єкт.

Залежно від типу об’єкта, який ви передаєте у функцію, функція поводиться по-різному. Незмінні об’єкти показують передачу за значенням, тоді як змінні об’єкти показують передачу за посиланням.

пошукова система та приклади

Ви можете перевірити різницю між передачею за значенням і передачею за посиланням у прикладі нижче:

Python3




def> call_by_value(x):> >x>=> x>*> 2> >print>(>'in function value updated to'>, x)> >return> > def> call_by_reference(>list>):> >list>.append(>'D'>)> >print>(>'in function list updated to'>,>list>)> >return> > my_list>=> [>'E'>]> num>=> 6> print>(>'number before='>, num)> call_by_value(num)> print>(>'after function num value='>, num)> print>(>'list before'>,my_list)> call_by_reference(my_list)> print>(>'after function list is '>,my_list)>

>

>

Вихід

  number before= 6    in function value updated to 12    after function num value= 6    list before ['E']    in function list updated to ['E', 'D']    after function list is ['E', 'D']>

У наведеному вище коді ми показали, як Python використовує концепцію виклику за посиланням у своїй програмі.

Ми передаємо ціле число у функцію call_by_value(). Цілі числа є незмінними об’єктами, тому Python працює відповідно до виклику за значенням, і зміни, зроблені у функції, не відображаються за межами функції.

Потім ми передаємо список функції за посиланням. У функції call_by_reference() ми передаємо список, який є змінним об’єктом. Python працює відповідно до виклику за посиланням у цій функції, а зміни, внесені всередині функції, також можна побачити за її межами.

Змінна не є об'єктом

Тут a — це змінна, яка вказує на список, що містить елементи X і Y. Але a сама по собі не є списком. Розглянемо a як відро, яке містить об’єкт X і Y.

 a = ['X', 'Y']>

Що таке передача за посиланням у Python?

Передача за посиланням означає, що ви повинні передати функцію (посилання) на змінну, що означає, що змінна вже існує в пам’яті.

Тут змінна (відро) передається безпосередньо у функцію. Змінна діє як пакет, який постачається разом із своїм вмістом (об’єктами).

У наведеному вище зображенні коду і list, і my_list є тією самою контейнерною змінною і, отже, посилаються на той самий об’єкт у пам’яті. Будь-яка операція, виконана функцією над змінною або об’єктом, буде безпосередньо відображена викликом функції. Наприклад, функція може повністю змінити вміст змінної та вказати її на зовсім інший об’єкт:

Крім того, функція може перепризначити вміст змінної з таким же ефектом, як показано нижче:

Підводячи підсумок, у передачі за посиланням функція та виклик використовують ту саму змінну та об’єкт.

Передача за посиланням у прикладі Python

У цьому прикладі функція modify_list бере список за посиланням. Функція додає рядок Geeks до переданого списку всередині функції та друкує його. Оскільки списки є змінними типами даних, зміни, внесені до списку всередині функції, також відображаються за межами функції, як ви бачите у виведених даних.

Python3




def> modify_list(x):> >x.append(>'Geeks'>)> >print>(>'Inside function:'>, x)> > my_list>=> [>'Geeks'>,>'for'>]> modify_list(my_list)> print>(>'Outside function:'>, my_list)>

>

>

Вихід

  Inside function: ['Geeks', 'for', 'Geeks']    Outside function: ['Geeks', 'for', 'Geeks']>

Що таке Pass by Value у Python?

У цьому підході ми передаємо копію в фактичні змінні у функції як параметр. Отже, будь-які зміни параметрів у функції не відображатимуться у фактичній змінній.

Те саме стосується будь-якої операції, що виконується функцією над змінною або об’єктом

Підсумовуючи, копії змінних і об’єктів у контексті викликаючої функції повністю ізольовані.

Передача значення в прикладі Python

Тут ми передамо ціле число x у функцію, яка є незмінним типом даних. Потім ми оновлюємо значення цілого числа всередині функції та друкуємо оновлене значення. Зміни не видно поза функцією, оскільки цілі числа є незмінними типами даних.

Python3




приклади машини Мура
def> modify_integer(x):> >x>=> x>+> 10> >print>(>'Inside function:'>, x)> > x>=> 5> print>(>'Before function call:'>, x)> modify_integer(x)> print>(>'After function call:'>, x)>

>

>

Вихід:

  Before function call: 5    Inside function: 15    After function call: 5>

Програмування на Python використовує концепцію передачі посилальних об’єктів під час передачі значень у функції. Ця стаття намагається показати вам концепцію передачі за значенням і передачі за посиланням у Python. Ми показали різні випадки передачі значень на прикладах. Передача значень у функцію в Python відрізняється від інших мов програмування, але за допомогою цього посібника ви зможете легко зрозуміти концепцію та застосувати її у своїй роботі.

Читайте також:

Виклик Python за посиланням чи виклик за значенням