网站首页 > 技术文章 正文
导语: 变量之所以叫“变量”,核心就是它的值可以改变!但改变值的时候,内存里发生了什么?今天带你看清:多次赋值后,变量名如何“搬家”到新空间,以及旧值去哪了?
一、现象观察:多次赋值,覆盖旧值
- 核心代码演示:
name = '玛利亚' # 第一次赋值:name指向存放'玛利亚'的空间
name = '楚留香' # 第二次赋值:name指向存放'楚留香'的新空间
print(name) # 输出:楚留香
- 关键发现: 无论赋值多少次,最后赋的值生效。上例中,print(name) 输出的是第二次赋值的 '楚留香','玛利亚' 仿佛“消失”了。
二、内存揭秘:变量名“搬家”,指向新空间
- 核心原理: 当给变量多次赋值时:
- 首次赋值 name = '玛利亚':在内存中开辟空间存放 '玛利亚',变量名 name 指向(引用)这个空间。
- 再次赋值 name = '楚留香':不是修改原空间的值! 而是在内存中开辟新空间存放 '楚留香',然后让变量名 name 断开与原空间的连接,重新指向这个新空间。
- 结果: name 这个“标签”从此贴在了装有 '楚留香' 的新“盒子”上。访问 name 只能找到新值。
三、图解内存:从“玛利亚”到“楚留香”
想象内存中有两个“带标签的盒子”:
- 初始状态 (执行 name = '玛利亚' 后):
name -----> [ 内存地址ID1 | 类型:str | 值:'玛利亚' ]
name 标签牢牢贴在第一个盒子上。
- 再次赋值后 (执行 name = '楚留香' 后):
name [ 内存地址ID1 | 类型:str | 值:'玛利亚' ] <-- 无人指向,变“垃圾”
[ 内存地址ID2 | 类型:str | 值:'楚留香' ] <-- name 的新家!
- name 标签撕下,从第一个盒子移走。
- name 标签重新贴上第二个装有 '楚留香' 的盒子。
- 第一个装有 '玛利亚' 的盒子无人引用,成为“内存垃圾”。
四、旧值去哪了?Python的“清洁工”
- 核心问题: 被 name “抛弃”的 '玛利亚' 去哪了?
- 答案:自动回收! Python 内置强大的垃圾回收机制 (Garbage Collection)。它会自动检测那些没有变量名指向的内存空间(如存放 '玛利亚' 的空间),并将其回收释放,供后续程序使用。
- 程序员福音: 开发者无需手动释放内存,Python 自动处理,极大降低内存管理负担。
总结与关键点:
- 变量值可变是核心特性。
- 多次赋值 ≠ 修改原值:每次赋值 (=) 都可能导致变量名指向全新的内存空间。
- 变量名是“标签”:它指向哪个空间,访问时就取哪个空间的值(最后贴的那个)。
- 旧值命运:被变量名“抛弃”的值,若再无引用,会被 Python 垃圾回收机制自动清理。
一句话记住: 给变量赋新值?其实是让它的名字“搬家”去新空间!旧房子(内存空间)自有“清洁工”处理。
猜你喜欢
- 2025-07-21 Python基础课堂 第二节 变量 #python编程
- 2025-07-21 python变量的秘密?(python的变量有哪些)
- 2025-07-21 为什么在Python3里有的变量前面有个*号呢?看完我懂了
- 2025-07-21 Python变量揭秘:内存里的“带标签盒子”,三要素缺一不可!
- 2025-07-21 Python教程(十三):变量作用域(python中变量作用域)
- 2025-07-21 Python自动化办公学习笔记11——布尔类型、变量赋值、类型转换
- 2025-07-21 Python教程(四):变量和数据类型简单解释
- 2025-07-21 Python 动态生成变量名以及动态获取变量的变量名
- 283℃Python短文,Python中的嵌套条件语句(六)
- 280℃python笔记:for循环嵌套。end=""的作用,图形打印
- 279℃PythonNet:实现Python与.Net代码相互调用!
- 274℃Python实现字符串小写转大写并写入文件
- 273℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 133℃原来2025是完美的平方年,一起探索六种平方的算吧
- 118℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 111℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 最近发表
-
- python tkinter tk窗口组件的基础用法介绍
- 一起学python:Tkinter——轻装上阵,快速入门
- Python GUI 编程:tkinter 初学者入门指南——窗格窗口
- Python GUI 编程:tkinter 初学者入门指南——Ttk 小部件
- Python,Tkinter的基础使用(python3 tkinter)
- 图文并茂:Python Tkinter从入门到高级实战全解析
- python tkinter桌面应用gui库基础介绍
- Python tkinter写个画图板,一个坑和实用知识解析
- python tkinter组件概述(python的tkinter模块详解)
- Flask中使用Blinker实现信号传递(flask传数据给前端)
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)