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 lambda和Python def区别分析
Nov 30 Python
通过mod_python配置运行在Apache上的Django框架
Jul 22 Python
深入理解Python中命名空间的查找规则LEGB
Aug 06 Python
python编程之requests在网络请求中添加cookies参数方法详解
Oct 25 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
Nov 30 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
Python Pandas知识点之缺失值处理详解
May 11 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
PHP实现的MongoDB数据库操作类分享
2014/05/12 PHP
php生成图片缩略图的方法
2015/04/07 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
iframe 自适应高度[在IE6 IE7 FF下测试通过]
2009/04/13 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
基于JS实现省市联动效果代码分享
2016/06/06 Javascript
jQuery Select下拉框操作小结(推荐)
2016/07/22 Javascript
轮播的简单实现方法
2016/07/28 Javascript
jQuery扩展+xml实现表单验证功能的方法
2016/12/25 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
[05:06]TI4西雅图DOTA2前线报道 海涛密探LGD训练
2014/07/09 DOTA
python动态加载包的方法小结
2016/04/18 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
python+opencv轮廓检测代码解析
2018/01/05 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
python获取txt文件词向量过程详解
2019/07/05 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
python zip()函数使用方法解析
2019/10/31 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
为什么是 Python -m
2020/06/19 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
Python利用Faiss库实现ANN近邻搜索的方法详解
2020/08/03 Python
数据库的约束含义
2012/09/09 面试题
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
销售会计岗位职责
2014/03/15 职场文书
授权委托书怎么写
2014/04/03 职场文书
勤俭节约倡议书
2014/04/14 职场文书
市级三好学生事迹材料
2014/08/27 职场文书
2014和解协议书范文
2014/09/15 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle