为什么变量在更改其因变量后不更新?

时间:2020-05-27 12:15:20

标签: python variables debugging

我不明白为什么更改x时变量'y'不会更新? (“ y”变量取决于“ x”吗?)

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)

4 个答案:

答案 0 :(得分:7)

(“ y”变量取决于“ x”对吗?

不。

很少有编程语言具有因变量/计算出的变量 [0],而Python并不是其中之一[1]。执行y = x*2时,将完全评估=右侧的表达式并将结果设置为y的值。此后y独立于x [2]。

通常来说,如果您希望yx的功能...则可以将其定义为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())

[0]我知道make的惰性变量和Perl的束缚标量

[1]它确实已经计算了属性(又称属性),但这是完全不同的事情

[2]在某些情况下,看起来像因变量,例如如果将y设置为x的可变子结构,则对x的此子部分的更改将通过y可见。不过,这实际上并不是依赖关系,只是两个变量指向相同的(可变)结构,因此这两个“可见”突变都应用于该共享结构。

答案 1 :(得分:1)

y变量依赖于x吗?

那么,首先,如果您设置了以下内容,

a = 7
b = a
a = 4

然后

print(id(a))print(id(b)),您将获得两个不同的ID,因此覆盖ba不会改变。

答案 2 :(得分:0)

您的y指向x变量的旧版本。 要更新y,您可以执行以下操作:

x = 5
y = x * 2

print(x)
print(y)

x = 3
y = x * 2

print(x)
print(y)

将输出:

5
10
3
6

答案 3 :(得分:0)

由于为变量y分配了一个值,为了对其进行更改,您将需要直接访问yy= x*2根据此代码行中y的值向x赋值。 python如何工作,还有其他代码语言可以像您期望的那样执行。 在将新值分配给x之后,您将需要再次写入y=x*2