Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python内存中保存变量的实际逻辑是什么_Python_Variables_Memory_Python 3.4 - Fatal编程技术网

在Python内存中保存变量的实际逻辑是什么

在Python内存中保存变量的实际逻辑是什么,python,variables,memory,python-3.4,Python,Variables,Memory,Python 3.4,在这个例子上 >>> 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是不同的,因此我们知

在这个例子上

>>> 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是不同的,因此我们知道两个
b
s是不同的,但是,如果
d
仍然是
2
,这意味着旧的
b
仍然在内存中的某个地方。因为新的
b
等于
4
,所以我们无法到达旧的
b
。我们不能说旧的
b
已经消失,因为
d
仍然是
2
。那么旧的
b
发生了什么?我们怎样才能找到旧的?它仍然存在,因为
d
等于
2

我想你是在假设你为d
d=c*b
写的等式是存储在内存中的,如果你更新b,它会更新d中的值。事实上,只要执行了
d=c*b
行,就会执行方程,返回的值就是存储在内存中的d值。这就是为什么更新b时它不更新。

为什么
d
等于2意味着旧的
b
仍然存在?因为如果
b
等于4,
d
必须等于8。但是重新定义
b
d
仍然等于
2
。因此,对该变量的操作取决于旧的
d=c*b
不是一个懒惰的计算,它是立即计算出来的,由
d
引用,之后更改
b
c
不会影响其值。“旧的
b
d
赋值期间是相关的,之后
d
将“记住”只是它的赋值,而不是它是如何计算的。你误解了事情是如何工作的。设置
d=c*b
会在此时设置
d
的值一次。
d
如果你以后更改
b
,它将不会“更新”。