在 python for 循环中更改浮点数的值
changing value of a float in python for loop
Python 类型仍然令人惊讶,在使用 Python 脚本编写一些经验之后!
在以下循环中:
import random
very_large_number = 10000000
for i in xrange(very_large_number):
variable = random.random()
print id(variable)
看起来我正在创建 10000000 个变量!
有什么方法可以只在内存中保留一个变量,只改变它的值吗?
每次创建一个新变量(例如variable = random.random()
),它都会被分配到内存中的一个新位置。因为您正在通过循环重新分配此变量,所以旧变量超出范围并最终被垃圾收集掉。您只是打印每个新分配的内存位置。这并不意味着打印的每个内存位置仍然处于活动状态。
变量没有保存在内存中。 Python 进行引用计数 - 所以在我的机器上我得到了输出:
...
29337248
29337272
29337248
29337272
...
看到规律了吗?解释器re-uses 内存。
至于不变性——好吧,这实际上是一个特性。只要有东西引用这个数字,它就不会消失。如果您分配给一个引用,所有其他引用仍指向原始值。
我只是想模拟你的问题:-
>>> 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 垃圾收集器检查引用计数,如果没有引用则对象将从内存中删除。
Python 类型仍然令人惊讶,在使用 Python 脚本编写一些经验之后! 在以下循环中:
import random
very_large_number = 10000000
for i in xrange(very_large_number):
variable = random.random()
print id(variable)
看起来我正在创建 10000000 个变量! 有什么方法可以只在内存中保留一个变量,只改变它的值吗?
每次创建一个新变量(例如variable = random.random()
),它都会被分配到内存中的一个新位置。因为您正在通过循环重新分配此变量,所以旧变量超出范围并最终被垃圾收集掉。您只是打印每个新分配的内存位置。这并不意味着打印的每个内存位置仍然处于活动状态。
变量没有保存在内存中。 Python 进行引用计数 - 所以在我的机器上我得到了输出:
...
29337248
29337272
29337248
29337272
...
看到规律了吗?解释器re-uses 内存。
至于不变性——好吧,这实际上是一个特性。只要有东西引用这个数字,它就不会消失。如果您分配给一个引用,所有其他引用仍指向原始值。
我只是想模拟你的问题:-
>>> 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 垃圾收集器检查引用计数,如果没有引用则对象将从内存中删除。