import random
very_large_number = 10000000
for i in xrange(very_large_number):
variable = random.random()
print id(variable)
看起来我正在创建10000000个变量! 有没有办法只在内存中保留一个变量,只是改变它的值?
答案 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
...
看模式?解释器重用内存。
至于不变性 - 嗯,实际上这是一个特征。只要有人引用这个数字,它就不会消失。如果指定给引用,则所有其他引用仍指向原始值。