Python 变量的创建过程详解


Posted in Python onSeptember 02, 2019

一、变量创建过程

首先,当我们定义了一个变量name = 'Kwan'的时候,在内存中其实是做了这样一件事:

程序开辟了一块内存空间,将'Kwan'存储进去,再让变量名name指向'Kwan'所在的内存地址。如下图所示:

Python 变量的创建过程详解

我们可以通过id()方法查看这个变量在内存中的地址。

name = 'Kwan'
print(id(name))

二、变量的修改

一般我们认为修改一个变量就是用新值把就旧值覆盖掉,可Python真是这么实现的么?

name = 'Kwan'
print(id(name))
name = 'Kobe'
print(id(name))

Python 变量的创建过程详解

实际的原理是什么样的呢?程序先申请了一块内存空间来存储'Kwan',让name变量名指向这块内存空间,往下执行name = 'Kobe'之后,又申请了另一块内存空间来存储'Kobe',并让原本指向'Kwan'内存的链接断开,让name再指向'Kobe'。

Python 变量的创建过程详解

三、变量的指向关系

问:下面这段代码为何出现这样的现象?

name1 = 'Kwan'
name2 = name1
print(name1, name2)
name1 = 'Kobe'
print(name1, name2)

Python 变量的创建过程详解

要想知道上面问题的结果是为什么,首先要了解再内存中两个变量的存储情况。

Python 变量的创建过程详解

从上面的示意图中我们可以知道,当执行name2 = name1时,事实上时让name2指向了'Kwan'所在的内存地址。

修改name1的值,相当于断开了name1到'Kwan'的链接,重新建立name1和'Kobe'之间的链接。在这个过程中,始终没有影响到name2和'Kwan'之间的关系,因此name2还是'Kwan',而name1变成了'Kobe'。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单总结Python中序列与字典的相同和不同之处
Jan 19 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
python实现随机梯度下降(SGD)
Mar 24 Python
python邮件发送smtplib使用详解
Jun 16 Python
Python写一个基于MD5的文件监听程序
Mar 11 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Django用户认证系统 组与权限解析
Aug 02 Python
git查看、创建、删除、本地、远程分支方法详解
Feb 18 Python
python查找特定名称文件并按序号、文件名分行打印输出的方法
Apr 24 Python
Python 中如何写注释
Aug 28 Python
python实现图片,视频人脸识别(dlib版)
Nov 18 Python
python实现MD5进行文件去重的示例代码
Jul 09 Python
python脚本之一键移动自定格式文件方法实例
Sep 02 #Python
Python中zip()函数的简单用法举例
Sep 02 #Python
Python在OpenCV里实现极坐标变换功能
Sep 02 #Python
Python 读取用户指令和格式化打印实现解析
Sep 02 #Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 #Python
Python目录和文件处理总结详解
Sep 02 #Python
Python3操作Excel文件(读写)的简单实例
Sep 02 #Python
You might like
在IIS上安装PHP4.0正式版
2006/10/09 PHP
PHP调用C#开发的dll类库方法
2014/07/28 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
2015/04/20 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
用js实现上传图片前的预览(TX的面试题)
2007/08/14 Javascript
javascript 构造函数强制调用经验总结
2012/12/02 Javascript
Google Dart编程语法和基本类型学习教程
2013/11/27 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
JS实现DIV容器赋值的方法
2015/12/14 Javascript
JavaScript常用字符串与数组扩展函数小结
2016/04/24 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
python实现哈希表
2014/02/07 Python
python实现统计代码行数的方法
2015/05/22 Python
python daemon守护进程实现
2016/08/27 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
Python多线程扫描端口代码示例
2018/02/09 Python
用python脚本24小时刷浏览器的访问量方法
2018/12/07 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
Python 转换文本编码实现解析
2019/08/27 Python
Python调用.NET库的方法步骤
2019/12/27 Python
购买中国最好的电子产品:Geekbuying
2018/03/13 全球购物
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
SNIDEL官网:日本VIVI杂志人气少女第一品牌
2020/03/12 全球购物
Linux面试题LINUX系统类
2015/11/25 面试题
班主任工作经验交流材料
2014/05/13 职场文书
合理化建议书
2015/02/04 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
远程教育集中轮训基层干部培训班学习心得体会
2016/01/09 职场文书
golang import自定义包方式
2021/04/29 Golang
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
数据设计之权限的实现
2022/08/05 MySQL