I don't understand why the variable 'y' doesn't update when I change the x? (The 'y' variable is dependent on 'x' right?)
x = 5
y = x*2
print(x)
print(y)
x = 3
# Expect it to print '3' and '6' instead it print '3' and '10'
print(x)
print(y)
I don't understand why the variable 'y' doesn't update when I change the x? (The 'y' variable is dependent on 'x' right?)
x = 5
y = x*2
print(x)
print(y)
x = 3
# Expect it to print '3' and '6' instead it print '3' and '10'
print(x)
print(y)
(The 'y' variable is dependent on 'x' right?
No.
Few programming languages have dependent / computed variables[0] and Python is not one of them[1]. When y = x*2
is executed, the expression on the right-side of the =
is fully evaluated and the result set as the value of y
. y
is thereafter independent from x
[2].
Generally speaking, if you want y
to be a function of x
... you define it as a function of x
:
x = 5
def y(): return x*2
print(x)
print(y())
x = 3
# Expect it to print '3' and '6' instead it print '3' and '10'
print(x)
print(y())
make
's lazy variables and Perl's tied scalarsy
to a mutable sub-structure of x
changes to this sub-part of x
will be visible through y
. That's not actually a dependency though, it's just that the two variables point to the same (mutable) structure, so both "see" mutations applied to that shared structure.The y
variable is dependent on x
right?
Well, first things first, if you set:
a = 7
b = a
a = 4
Then,
print(id(a))
and print(id(b))
, you will get two different ids, hence b
will not change when you overwrite a
.
Your y points to an older version of the x-variable. To update y, you could do:
x = 5
y = x * 2
print(x)
print(y)
x = 3
y = x * 2
print(x)
print(y)
Which will output:
5
10
3
6
Because after you assign a value to variable y
, in order to change it you will need to access directly to y
.
y= x*2
is assigning value to y
according to what the value of x
in this line of code. this how python works, there are other code languages who can preform like u expected.
after assigning the new value to x
, you will need to write again y=x*2
.