程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python变量大变身!多次赋值后,内存空间竟然“换房”了?

hfteth 2025-07-21 14:02:58 技术文章 3 ℃

导语: 变量之所以叫“变量”,核心就是它的值可以改变!但改变值的时候,内存里发生了什么?今天带你看清:多次赋值后,变量名如何“搬家”到新空间,以及旧值去哪了?

一、现象观察:多次赋值,覆盖旧值

  • 核心代码演示:
name = '玛利亚'  # 第一次赋值:name指向存放'玛利亚'的空间
name = '楚留香'  # 第二次赋值:name指向存放'楚留香'的新空间
print(name)     # 输出:楚留香
  • 关键发现: 无论赋值多少次,最后赋的值生效。上例中,print(name) 输出的是第二次赋值的 '楚留香''玛利亚' 仿佛“消失”了。

二、内存揭秘:变量名“搬家”,指向新空间

  • 核心原理: 当给变量多次赋值时:
  • 首次赋值 name = '玛利亚':在内存中开辟空间存放 '玛利亚',变量名 name 指向(引用)这个空间。
  • 再次赋值 name = '楚留香'不是修改原空间的值! 而是在内存中开辟新空间存放 '楚留香',然后让变量名 name 断开与原空间的连接重新指向这个新空间。
  • 结果: name 这个“标签”从此贴在了装有 '楚留香' 的新“盒子”上。访问 name 只能找到新值。

三、图解内存:从“玛利亚”到“楚留香”

想象内存中有两个“带标签的盒子”:

  1. 初始状态 (执行 name = '玛利亚' 后):
name  -----> [ 内存地址ID1 | 类型:str | 值:'玛利亚' ]

name 标签牢牢贴在第一个盒子上。

  1. 再次赋值后 (执行 name = '楚留香' 后):
name          [ 内存地址ID1 | 类型:str | 值:'玛利亚' ]  <-- 无人指向,变“垃圾”
             
             [ 内存地址ID2 | 类型:str | 值:'楚留香' ]  <-- name 的新家!
  • name 标签撕下,从第一个盒子移走
  • name 标签重新贴上第二个装有 '楚留香' 的盒子。
  • 第一个装有 '玛利亚' 的盒子无人引用,成为“内存垃圾”。

四、旧值去哪了?Python的“清洁工”

  • 核心问题:name “抛弃”的 '玛利亚' 去哪了?
  • 答案:自动回收! Python 内置强大的垃圾回收机制 (Garbage Collection)。它会自动检测那些没有变量名指向的内存空间(如存放 '玛利亚' 的空间),并将其回收释放,供后续程序使用。
  • 程序员福音: 开发者无需手动释放内存,Python 自动处理,极大降低内存管理负担。

总结与关键点:

  1. 变量值可变是核心特性。
  2. 多次赋值 ≠ 修改原值:每次赋值 (=) 都可能导致变量名指向全新的内存空间
  3. 变量名是“标签”:它指向哪个空间,访问时就取哪个空间的值(最后贴的那个)。
  4. 旧值命运:被变量名“抛弃”的值,若再无引用,会被 Python 垃圾回收机制自动清理

一句话记住: 给变量赋新值?其实是让它的名字“搬家”去新空间!旧房子(内存空间)自有“清洁工”处理。

最近发表
标签列表