在python for循环中更改float的值

时间:2016-01-25 21:23:14

标签: python immutability

在使用Python脚本之后,Python类型仍然令人惊讶! 在以下循环中:

import random
very_large_number = 10000000
for i in xrange(very_large_number):
    variable = random.random()
    print id(variable)

看起来我正在创建10000000个变量! 有没有办法只在内存中保留一个变量,只是改变它的值?

3 个答案:

答案 0 :(得分:1)

每次创建新变量(例如{{1}})时,都会将其分配给内存中的新位置。因为您通过循环重新分配此变量,所以旧变量超出范围并最终被垃圾收集掉。您只是打印每个新分配的内存位置。这并不意味着每个打印的内存位置仍然有效。

答案 1 :(得分:1)

我只是试图模拟你的问题: -

>>> import random
>>> very_large_number = 10
>>> for i in xrange(very_large_number):
    variable = random.random()
    print id(variable)


37663064
31924560
37663064
31924560
37663064
31924560
37663064
31924560
37663064
31924560

正如预期的那样,内存被清理和回收。 Python垃圾收集器检查引用计数,如果没有引用,那么对象将从内存中删除。

答案 2 :(得分:0)

变量不会保留在内存中。 Python确实引用了计数 - 所以在我的机器上我得到了输出:

...
29337248
29337272
29337248
29337272
...

看模式?解释器重用内存。

至于不变性 - 嗯,实际上这是一个特征。只要有人引用这个数字,它就不会消失。如果指定给引用,则所有其他引用仍指向原始值。