图解Python变量与赋值

 更新时间:2018年04月03日 13:54:23   作者:liuzhijun  
Python是一门独特的语言,与C语言有很大区别,初学Python很多萌新表示对变量与赋值不理解,这里就大家介绍一下,需要的朋友可以参考下

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

int a = 1;

inta

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

现在给变量a重新赋值

a = 2;

inta2

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

再来看:

int b = a;

inta3

当把变量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

a1

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

然后执行

a=2

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

a2

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

b = a

a3

相当于在刚才的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上面的标签。

names1

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

>>> 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的值更新了,但对象依然是原来那个对象。就好比张三和小张都是同一个人,现在给小张换件衣服时,其实就是给张三换件衣服,人还是那个人,只是它身上的东西发生了变化。

names1

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

相关文章

  • python删除目录的三种方法

    python删除目录的三种方法

    本文主要介绍了python删除目录的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Python中decorator使用实例

    Python中decorator使用实例

    这篇文章主要介绍了Python中decorator使用实例,本文讲解了如何调用decorator、decorator函数的定义、decorator的应用场景等内容,需要的朋友可以参考下
    2015-04-04
  • pytorch模型转换为onnx可视化(使用netron)

    pytorch模型转换为onnx可视化(使用netron)

    netron 是一个非常好用的网络结构可视化工具,但是netron对pytorch模型的支持还不成熟,这篇文章主要介绍了pytorch模型转换为onnx,并使用netron可视化,需要的朋友可以参考下
    2023-05-05
  • 解决pycharm下pyuic工具使用的问题

    解决pycharm下pyuic工具使用的问题

    这篇文章主要介绍了解决pycharm下pyuic工具使用的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】

    Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】

    这篇文章主要介绍了Python操作SQLite数据库的方法,简单说明了sqlite数据库的相关概念,并结合实例形式较为详细的分析了Python针对sqlite数据库的导入,创建,游标,增删改查等操作技巧,需要的朋友可以参考下
    2017-07-07
  • 解决csv.writer写入文件有多余的空行问题

    解决csv.writer写入文件有多余的空行问题

    今天小编就为大家分享一篇解决csv.writer写入文件有多余的空行问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python通过命令行向Scrapy传递参数

    Python通过命令行向Scrapy传递参数

    crapy作为一个强大的Web爬取框架,提供了灵活的命令行参数传递功能,本文介绍了通过命令行向Scrapy爬虫传递参数的方法,旨在增强爬虫的灵活性和可配置性,感兴趣的可以了解一下
    2024-10-10
  • 地图可视化神器kepler.gl python接口的使用方法

    地图可视化神器kepler.gl python接口的使用方法

    这篇文章主要介绍了python 地图可视化神器kepler.gl近期重要更新的的相关资料,帮助大家利用python实现地图可视化,感兴趣的朋友可以了解下
    2020-12-12
  • pyspark给dataframe增加新的一列的实现示例

    pyspark给dataframe增加新的一列的实现示例

    这篇文章主要介绍了pyspark给dataframe增加新的一列的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • Python中打包和解包(*和**)的使用详解

    Python中打包和解包(*和**)的使用详解

    *和**在函数的定义和调用阶段,有着不同的功能,并且,*和**不能离开函数使用,这篇文章主要介绍了Python中打包和解包(*和**)的使用详解,需要的朋友可以参考下
    2022-08-08

最新评论