图解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 相关文章推荐
在IIS服务器上以CGI方式运行Python脚本的教程
Apr 25 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
python3.4实现邮件发送功能
May 28 Python
python 以16进制打印输出的方法
Jul 09 Python
tensorflow 用矩阵运算替换for循环 用tf.tile而不写for的方法
Jul 27 Python
django 将model转换为字典的方法示例
Oct 16 Python
python实现归并排序算法
Nov 22 Python
解决Django中修改js css文件但浏览器无法及时与之改变的问题
Aug 31 Python
关于Numpy中的行向量和列向量详解
Nov 30 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
keras打印loss对权重的导数方式
Jun 10 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 向访客和爬虫显示不同的内容
2009/11/09 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
PHP中ini_set和ini_get函数的用法小结
2014/02/18 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
js验证表单大全
2006/11/25 Javascript
二行代码解决全部网页木马
2008/03/28 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
在小程序中集成redux/immutable/thunk第三方库的方法
2018/08/12 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
JavaScript Html实现移动端红包雨功能页面
2021/01/10 Javascript
Python封装shell命令实例分析
2015/05/05 Python
Python中max函数用法实例分析
2015/07/17 Python
python爬虫实现教程转换成 PDF 电子书
2017/02/19 Python
Python Web版语音合成实例详解
2019/07/16 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
彪马美国官网:PUMA美国
2017/03/09 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
关于抽烟的检讨书
2014/02/25 职场文书
年终总结会议主持词
2014/03/17 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书
python实现剪贴板的操作
2021/07/01 Python
Redis 常见使用场景
2021/08/30 Redis
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android