您的位置:首页 > 编程语言 > Python开发

Python自学指南---基础篇(四)对象基础

2018-10-28 09:47 155 查看

4.1 Python对象的特性

Python作为一门面向对象的语言,利用对象对一切数据进行存储。所有的Python对象都具有三个基本特性:身份、类型和值。

  • 身份:可以理解为对象的内存地址,用id()可以得到,是一个对象的唯一身份标识
  • 类型:决定了对象可以保存什么类型的值,进行什么样的操作。利用type()可以查看对象类型。在学习Python对象的过程中,其实主要就是对各种各样的类型进行学习。
  • 值:对象中实际的数据值。

我们可以把内存比做一个杂物间,或者更衣室…某一个对象就可以视为一个储物柜(图画的糙了点儿):

那么这些储物柜的号码101,202作为它们杂物间中的唯一标识,就相当于对象在内存中的地址;再可以将不同类型的对象比作不同形状的柜子,例如正方体的柜子代表Number类型,长方形的柜子能放的东西多,可以代表List类型;不同类型的柜子中存放着相应类型的物品,存放的物品也就相当于对象中的实际数据值。

4.2 引用与对象的关系

为了在程序中使用某个对象,首先需要做的就是声明,也就是为对象起个名字,例如:

alice=2    ##假设此时a的地址变为”101“

曾经在介绍赋值的时候提到过,一个变量名相当于对象的一个“引用”。在这里,我们可以将引用和对象的关系,理解为标签和柜子的关系。

可以想像这样一个场景:你叫alice,你去存一个包,包上面印了一个“2”(随意想象,这个物品就代表数据值“2”),然后跟管理员(内存)要个柜子,管理员看了一下你这个包的大小,就在正方形(类型)的柜子里随便找了个101号(内存地址),把包放进去,并且把带有你名字的标签(引用)贴在了柜子上:

简单来说,看到“alice=2”这个语句,就可以在脑海中想象,在某个装着物品的柜子上(对象)贴了个alice的标签(引用)

在Python中有一个重要的概念,就是“引用和对象分离”,也就是在你声明一个引用指向一个对象的之后,该引用可以随时指向其他对象。你可以在程序中写a=1,之后完全可以让a=2。有一些语言中,引用和对象是绑定的,也就是说在声明引用指向某个对象后,就不能再改变指向了。

形象理解的话,也就相当于:标签可以从柜子上撕下来,贴到其他柜子上。

4.3 可变与不可变对象

Python对象还有一个重要的基础,就是可变对象与不可变对象。

首先需要明确,提到一个对象是否可变时,指的是对象的值是否能够改变。

  • 不可变对象

由于不可变对象的值不能改变,因此在程序中,对相应的引用进行修改时,相当于把原来所指向对象的值复制一份后再改变,这会创建一个新的对象,即开辟一个新的内存空间来保存改变后的值,并且让引用指向新的对象。例如:

a=2            #id(a)=140213534883200
a=a+2          #id(a)=140213534883152
#   a在两次赋值操作后的,指向的地址就发生了变化。

一般的不可变对象的类型有:Number,tuple,string

  • 可变对象

由于可变对象的值能够改变,因此在对相应的引用进行修改时,可以实现“原地修改”,即引用仍指向原来的对象。
一般的可变对象的类型有:List,Sets,dict

用储物柜模型来理解的话,不可变对象就是一个在你离开之前(程序结束)都不能打开的柜子,因此你只能事先想好了在柜子里存什么物品,如果中途你想放点其他物品,就得跟管理员要另外一个柜子,再把标签从原来的柜子上撕下来,贴到新柜子上。

而可变对象就相当于一个你随时可以打开的柜子。

在之后的章节中,将会对不同的对象类型逐一进行介绍。

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: