Select Language

AI社区

AI技术百科

2.26、Python变量、对象和值的关系

前面的例子中我们已经用到了变量,如:

>>> a = 12

就创建了变量,而且变量的值为 12,但对象接触的不是很多。

变量就是一个符号,或者说是名字。类比现实生活,相当于是身份证。

对象是一段存储空间,简单来说就是一块内存。类比现实生活就是某个具体的人。对象有很多属性,其中一个属性就是类型。相同类型的对象有很多一样的属性。类型就类似于国籍,相同国籍的人虽然不同,但是有很多一样的属性,如所有中国人都有一个户口的属性,其他国家的人就没有这个属性。

值就是对象的详细属性。如某个整型对象,其值为 100,而另外一个整型对象,其值就为 800。

图1所示描述了它们的关系。

变量、对象和值的关系
图1:变量、对象和值的关系


它们的关系是每个变量一定对应某个对象,变量的值就是该变量对应对象的值。每个对象有三个基础属性,id、类型和值。每个对象的 id 是不同的,但是两个不同对象的类型和值可以相同。

可以使用“id(变量名)”来获得对象的 id。

>>> a = 12
>>> id(a)      # 得到变量a对应对象的id
140377101203968
>>> b = "abc"  # 新建一个字符串对象,并让变量b指向该对象
>>> id(b)      # 得到变量b对应对象的id
4370848984

可以使用“type(变量名)”来查看对象的类型。

>>> a = 12
>>> type(a)<type 'int'>
>>> b = "abc"
>>> type(b)<type 'str'>

可以通过变量名来得到对象的值。

>>> a = 12  # 创建一个对象,其值为12,并且用a来记录它
>>> a       # 得到a所对应的对象的值
12
>>> a = 13  # 修改a所对应的对象的值
>>> a       # 得到a所对应的对象的值
13

前面提到某个变量一定有一个对应的对象,那么随着时间的推移,某个变量是否可以对应到另外一个对象上呢?这个是可以的。

>>> a = 12
>>> id(a)
140377101203968
>>> a = "abc"
>>> id(a)  # id发生了变化,变量a所对应的对象也发生了变化
4370848984

可以用图2来表示该过程。开始变量 a 指向值为 12 的对象,后来 a 指向了一个新的对象,该对象值为“abc”。

变量重新赋值
图2:变量重新赋值


那么可不可以两个变量对应同一个对象呢?答案是可以的。如下面的情况:

>>> a = [1, 2, 3, 4]
>>> id(a)
4370717152
>>> b = a
>>> id(b)   # 变量b对应的对象和变量a对应的对象的id相同
4370717152  # 这说明a和b指向同一个对象


可以用图3来表示这种情况。

变量共用对象
图3:变量共用对象


这时对 a 的修改和对 b 的修改是一样的。

>>> a = [1, 2, 3, 4]
>>> id(a)
4370717152
>>> b = a
>>> id(b)
4370717152
>>> a.append(100)  # 修改变量a指向的对象
>>> a
[1, 2, 3, 4, 100]
>>> b              # b指向的对象也发生了改变
[1, 2, 3, 4, 100]


那么如何知道两个变量对应的对象是同一个对象呢?可以通过判断 id 是否相等来确定。

>>> a = [1, 2, 3, 4]
>>> b = a
>>> id(a) == id(b)  # 判断a和b的id是否相等
True


也可以通过 is 操作符来判断,如下:

>>> a = [1, 2, 3, 4]
>>> b = a
>>> a is b
True


另外一种情况是两个不同的对象有相同的值。

>>> a = 1024
>>> b = 1000 + 24
>>> a
1024
>>> b
1024
>>> id(a)   # 变量a指向的对象和变量b指向的对象是两个对象
140377101238440
>>> id(b)
140377101238464
>>> a is b  # 此时通过is操作返回False
False


这种情况可以用图4来表示。

不同对象的值相同
图4:不同对象的值相同


我要发帖
  • 26

    条内容
Python基本数据类型一共26个章节
本章将介绍 Python 内置的基本数据类型,包括整型、浮点数、字符串、布尔型、列表、元组、集合和字典等 Python 定义的基本数据类型,以及这些数据类型的运算操作。
我们知道,Python 是强类型语言,每个变量在某个时刻的类型是确定的。也就是说,Python 中任意一个存活的对象,其类型是唯一的。不同类型的对象有不同的属性,能完成不同的操作。
另外本章最后还会介绍变量、对象等概念。每个对象都有一个确定的类型,每个变量都指向某个特定的对象。