图解Python变量与赋值


Posted in Python onApril 03, 2018

Python是一门独特的语言,与C语言有很大区别,初学Python很多萌新表示对变量与赋值不理解,学过C的都知道,给变量赋值时,需要先指定数据类型,同时会开辟一块内存区域,用于存储值,例如:

int a = 1;

图解Python变量与赋值

a 就是内存空间中的一小块区域,就像是一个大房间里面的一个小盒子,赋值就是把整数1装载到盒子里面。

现在给变量a重新赋值

a = 2;

图解Python变量与赋值

盒子依然是那个盒子,也就是说内存地址没有变,只是该段内存中的值变了,变成了2。

再来看:

int b = a;

图解Python变量与赋值

当把变量a赋值给另外一个变量b时,相当于把值拷贝了一份传递给变量b,b是新开辟的一段内存区域

而在Python中,“变量”的严格叫法是“名字(name)”,也可以理解为标签,就像我们人的姓名一样,名字就是挂在人身上的一个标签。

>>> 10-a
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

比如上面这段错误报的是name 'a' 没有定义,而没有说成 variable。

在Python中,给变量赋值就是相当于给对象贴标签,就像我们给人取名字一样,变量本身是没有任何意义的,它没有类型信息,真正的信息都在对象身上。

例如:

a = 1

图解Python变量与赋值

Python内部首先会分配一段内存空间用于创建整数对象1,然后给这个1贴上名为a的标签。

然后执行

a=2

Python接着会在另一块内存区域创建整数对象2,然后把标签a从1身上撕下来贴在2身上,此时,我们没法再通过a来得到1这个值了。

图解Python变量与赋值

现在把名字a赋值给另外一个名字b

b = a

图解Python变量与赋值

相当于在刚才的2身上又贴了一个新的标签b,注意,这里和C语言是完全不一样的,定义b的时候不需要分配内存空间,这样我们既可以通过a来访问2也可以通过b来访问2,访问的都是同一个对象,就好比我们给宝宝取名时既有小名也有大名,其实叫的都是同一个人。

虽然我们通常在Python中还是用"变量"的叫法(因为在编程语言中这是一种通用叫法),但是我们需要理解Python中的变量不同于其他语言,变量只是一个名字。

理解了Python中的变量与赋值后,再来看函数的参数传递,如下所示:

>>> def fun_a(a):
...   a = a+4
...
>>> g = 0
>>> fun_a(g)
>>> g
0

全局变量g传递给函数fun_a时,相当于函数中的参数a也将作为标签贴在0上,随后a被重新赋值了(a=a+4),相当于从0撕下标签a贴到4身上,然后g依然还是0上面的标签。

图解Python变量与赋值

再来看这个函数,传递的是一个列表对象

>>> def fun_b(names):
...   names[0] = ['x', 'y']
...
>>> n_list = ['a','b','c']
>>> fun_b(n_list)
>>>
>>> n_list
[['x','y'], 'b', 'c']

与前面的步骤还是一样的,names 和 n_list 都是['a','b','c']上的一个标签,只是列表中的第0个元素被重新赋值了,但是names和 n_list 依然都贴在这个列表对象身上,虽然 n_list的值更新了,但对象依然是原来那个对象。就好比张三和小张都是同一个人,现在给小张换件衣服时,其实就是给张三换件衣服,人还是那个人,只是它身上的东西发生了变化。

图解Python变量与赋值

以上内容就介绍到这,大家可以继续看下面的相关文章。

Python 相关文章推荐
Python单例模式的两种实现方法
Aug 14 Python
Python3实现的画图及加载图片动画效果示例
Jan 19 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
使用Python AIML搭建聊天机器人的方法示例
Jul 09 Python
Sanic框架Cookies操作示例
Jul 17 Python
Python实现的在特定目录下导入模块功能分析
Feb 11 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
python爬虫 urllib模块发起post请求过程解析
Aug 20 Python
python实现淘宝购物系统
Oct 25 Python
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
May 17 Python
一行Python命令实现批量加水印
Apr 07 Python
Python实现的HMacMD5加密算法示例
Apr 03 #Python
Python通过调用mysql存储过程实现更新数据功能示例
Apr 03 #Python
python批量读取txt文件为DataFrame的方法
Apr 03 #Python
python逐行读写txt文件的实例讲解
Apr 03 #Python
Python实现的计算马氏距离算法示例
Apr 03 #Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 #Python
快速解决安装python没有scripts文件夹的问题
Apr 03 #Python
You might like
php whois查询API制作方法
2011/06/23 PHP
PHP最常用的正则表达式
2017/02/13 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
JavaScript淡入淡出渐变简单实例
2015/08/06 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
vue2 自定义动态组件所遇到的问题
2017/06/08 Javascript
Vue-CLI3.x 设置反向代理的方法
2018/12/06 Javascript
解决vue单页面应用中动态修改title问题
2019/06/09 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
[46:44]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
Python魔术方法详解
2015/02/14 Python
Python字符串格式化
2015/06/15 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python 将RGB图像转换为Pytho灰度图像的实例
2017/11/14 Python
Python之csv文件从MySQL数据库导入导出的方法
2018/06/21 Python
详解重置Django migration的常见方式
2019/02/15 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
Python Django2.0集成Celery4.1教程
2019/11/19 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
PythonPC客户端自动化实现原理(pywinauto)
2020/05/28 Python
python 自定义异常和主动抛出异常(raise)的操作
2020/12/11 Python
HTML5上传文件显示进度的实现代码
2012/08/30 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
医学类个人求职信范文
2014/02/05 职场文书
家长评语和期望
2014/02/10 职场文书
校园安全演讲稿
2014/05/09 职场文书
英语教育专业自荐信
2014/05/29 职场文书
户籍证明格式
2014/09/15 职场文书
2014年银行员工年终自我评价
2014/09/19 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书