如何理解python的“变量无类型,数据(对象)有类型“

Posted geng_zhaoying

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何理解python的“变量无类型,数据(对象)有类型“相关的知识,希望对你有一定的参考价值。

计算机为了处理数据,就必须保存这些数据。程序设计的说法是用变量保存数据,其格式为:变量名=数值,例如:a=2。习惯上说:定义一个变量a赋值为2,更简单些,令变量a等于2,或a等于2。那么在python中,语句a=2执行了那些操作将数据2保存,并令变量a代表数据2呢?为解释这一点,必须简单介绍些硬件知识。
在买手机时,最关心的指标之一是运行内存(RAM,简称内存)大小,内存越大,手机运行速度越快。当手机运行一个应用程序,例如微信,应用程序和应用程序所用的数据都将保存到内存中,换句话讲,应用程序只能在内存中运行,处理数据。内存可想象为有多个方格的储物柜,每个方格都有唯一编号,将物品保存到某编号方格内,取物品时,根据编号很容易取回物品。内存也有很多单元,每个单元也有编号,内存的编号一般称为地址。把数据保存到内存单元中,根据内存地址就能存取数据。直接用地址访问数据,十分不便。就像每个学生都有学号,而老师点名学生时,总是使用学生名字点名,因学号和学生姓名有对应关系。因此也可以为保存数据的内存单元起一个名字,称为变量,并将变量和数据地址形成对应关系。可将整个内存划分为多个区域,包括保存程序的区域,保存变量的区域,以及保存数据区域等。一个变量包括两部分:变量名字符串和变量名所对应的数据存储地址。这样使用变量访问数据,实际上是变量通过地址访问数据,习惯上称作:变量通过地址引用数据,简称:变量引用(代表)数据。例如定义a=2,python首先将2保存到内存数据区某单元,然后将变量名字符a和数据2的地址保存到内存变量区。如果再令a=2.3,先将浮点数2.3保存到内存数据区,变量名保持不变,仅将其后的地址换为浮点数在内存的地址,称作变量a引用(代表)了浮点数2.3,由于变量a不再引用整数2,整数2所占用的内存单元将被垃圾收集器收回。那么为什么这样做呢?将数据2直接和变量名保存到一起不更简单吗?数据有多种类型,将来能看到有些数据占用内存很多,将数据直接和变量名保存到一起,会使查找变量名变得十分复杂,即通过变量名访问数据变得十分复杂。python采用的方法,每个变量占用空间相同,都是变量名字符串加上数据所在内存地址,通过变量名访问数据变得十分容易。顺便提醒读者,不是所有程序设计语言都采用python保存数据方法。
通过以上论述,可知在Python中变量无法单独使用,只有为变量赋值后,才能建立变量,这个变量就引用(代表)这个数据,通过变量可以访问该数据。如果为已存在变量赋值为其他类型数据,这个变量将就引用(代表)新的不同类型数据,即某个变量即可引用(代表)这种数据类型,也可以引用(代表)其它种数据类型,因此说:变量无类型,数据有类型。
python 预先定义了很多函数,称为内置函数,任何时候都能使用。函数是为了完成某些功能,预先编写的一段程序,并给这段程序起一个名子称为函数名,用函数名调用这段程序,完成指定功能。例如内置函数type(变量名)可得到该变量名代表数据的类型,其中type是函数名,括号内的变量称为参数,不能认为这是变量的数据类型,是变量所代表的数据的类型。用内置函数id(变量名)能得到该变量名代表数据在内存的地址。例子如下,它说明变量a可引用不同类型数据,可引用整型数,也可引用浮点数,整型数2和浮点数2.2被保存的内存地址是不同的,是两个不同数据。
>>> a=2 #2是整型数
>>> type(a) #int表示整型数,class表示是整型类,所有数据都是类对象
<class ‘int’>
>>> id(a) #得到变量a代表数据2在内存的地址,
140721116141248 #该地址和读者得到地址可能不同。
>>> a=2.2 #2.2是浮点数
>>> type(a) #float表示浮点数
<class ‘float’>
>>> id(a) #变量a代表新数据2.2在内存的地址
2068448440112 #和上一个地址一定不同,因它们是不同数据
用变量引用(代表)数据,因此该变量名必须是唯一的。变量名,除了和其它变量名不能重名外,还需遵循python变量命名规则

以上是关于如何理解python的“变量无类型,数据(对象)有类型“的主要内容,如果未能解决你的问题,请参考以下文章

如何理解python的“变量无类型,数据(对象)有类型“

如何理解python的“变量无类型,数据(对象)有类型“

如何理解这段python程序

Python中的多态如何理解?(转帖,让我很理解。)

如何理解python装饰器

如何来理解Python中的字典数据类型