+ 1

please explain the lost output | python

def chval(x): x*=3 print(x) x=3 chval(x) print(x) x=[1,2] chval(x) print(x) Code output: 9 3 [1,2,1,2,1,2] [1,2,1,2,1,2] the lost out-put was little confusing some one please explain that please

24th Nov 2020, 8:13 AM
Antony Praveenkumar M
Antony Praveenkumar M - avatar
2 Respostas
+ 1
list is a mutable type. Mutable types behave as if they are passed by reference while immutable types behave as if they are passed value. More info: https://realpython.com/JUMP_LINK__&&__python__&&__JUMP_LINK-pass-by-reference/ Check the id's of the objects. Also, note I changed the local variables name the y in the function. def chval(y): y*=3 print("id: y", id(y)) print(y) x=3 chval(x) print("id: x", id(x)) print(x) x=[1,2] chval(x) print("id: x", id(x)) print(x)
24th Nov 2020, 9:03 AM
ChaoticDawg
ChaoticDawg - avatar
+ 1
Take a look at function body x *= 3 print(x) What happens to <x> in the `chval` function is contextual. Meaning, what happens to <x> when <x> was an `int` will be different to that when <x> was a `list`. When <x> was an `int`, its value will be multiplied by 3. Now remember, `int` is an immutable type (class), meaning, the modification to `int` <x> in function `chval` will not reflect to the actual object outside the `chval` function. When <x> was a `list`, the function will replicate the `list` contents three times. This is why [1, 2] becomes [1, 2, 1, 2, 1, 2]. And also remember that `list` is a mutable type (class), meaning, the changes written to the `list` will reflect to the actual object outside the `chval` function.
24th Nov 2020, 9:07 AM
Ipang