【发布时间】:2015-02-17 04:26:13
【问题描述】:
在这个例子中;
>>> b = 2
>>> c = b/2
>>> d = c*b
>>> id(b)
1820966944
>>> d
2.0
>>> b = 4
>>> d
2.0
>>> id(b)
1820966976
>>> d
2.0
>>>
在我们重新定义变量 b 之后,d 仍然是 2。 id 是不同的,所以我们知道 bs 是不同的,但是如果 d 仍然是 2 这意味着旧的 b 仍然在内存中的某个地方。由于新的b 等于4,我们无法访问旧的b。我们不能说旧的b 消失了,因为d 仍然是2。那么老 b 发生了什么?我们怎样才能接触到旧的?它仍然存在,因为d 等于2。
【问题讨论】:
-
为什么
d等于2意味着旧的b仍然存在? -
因为如果
b等于4,d必须等于8。但是d在重新定义b后仍然等于2。所以对这个变量的操作依赖于旧变量 -
d = c*b不是惰性计算,它是立即计算并由d引用,之后更改b或c不会影响其值。 -
“旧”
b在分配d期间是相关的,之后d将仅“记住”它的分配值——而不是它的计算方式。 -
您误解了事情的运作方式。设置
d = c*b会设置donce 的值,此时。如果您稍后更改b,d将不会“更新”。
标签: python variables memory python-3.4