【问题标题】:Consider `var = 5`, would the value `5` be automatically dedeted by the computer once I re-assign another value to `var`? [duplicate]考虑`var = 5`,一旦我为`var`重新分配另一个值,计算机会自动删除值`5`吗? [复制]
【发布时间】:2019-12-02 03:13:28
【问题描述】:

让我们考虑一个简单的情况,

var = 5
var = 6

第一行将5 分配给var,下一行将6 重新分配给var。只是出于好奇,5 的值是否会自动从 CPU 的内存中删除?如果不是,那么理论上下面的python代码会不会因为内存消耗而炸毁我的电脑?

var = 5
while True:
    var = var + 1

【问题讨论】:

标签: python ubuntu out-of-memory cpu


【解决方案1】:

如果这个示例是在没有纯 Python 的情况下完成的(例如 Pandas/NumPy),那么在消耗完所有计算机内存之前,您会出现整数溢出。纯 Python 3 有一个int 类型,理论上可以存储任意长的整数;但是,您的计算机的可用内存仍然存在限制。 Python在后台进行内存管理,这个重新赋值不会在变量重新赋值后保持内存中的值5。

本质上:

var = 5 # var is 5 and its address is managed for you
var = 6 # the value that var points to is now 6, there's no record of 5 anymore.

所以当你做完整的循环时:

var = 5
while True:
    var = var + 1 # This is reassignment of the value at the address -- NOT bloating memory

【讨论】:

  • “你会得到整数溢出”在 Python 中不是一个问题,它使用任意大小的整数
【解决方案2】:

是的,var 不再保留其先前的值,以免从内存中删除。在 CPython(Python 的通常实现)中:

  • 这种情况通常会在您重新分配 var 后立即发生,因为 CPython 使用引用计数
  • 这不会发生在 5 上,因为 CPython 始终在内存中保留一定范围的小整数

在任何合理的 Python 实现中,您的循环都不会用旧的整数填满内存。在实践中,它使用少量的有限内存。

理论上

理论上,Python 具有任意大小的整数,因此您将在 216,000,000,000 次循环迭代后使用(例如)2 GB 内存。由于这个原因,你永远不会接近耗尽内存,因为宇宙中没有足够的时间到达那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    相关资源
    最近更新 更多