《Python学习手册 第五版》 -第6章 动态类型

本章主要讲述变量、对象、引用三者直接的关联及区别,详细说明了在变量赋值的操作中,计算机内部到底发生了什么,有哪些是不被人察觉和需要明确了解的

1.先从最简单的赋值语句开始

a=3

这一句,基本就能涵盖了我们今天要讲的内容

a:这个是变量

=:这个就是变量对某一个对象的引用

3:这个就是对象

简单的这句话,计算机讲执行一下三个步骤

1).创建一个对象来代表值3

2).创建一个变量a(如果它还没有创建的话)

3).讲变量a与对象3相链接

关于变量要特别说明一下,如果有了解Java的,你就知道,在使用变量的时候需要声明变量的类型,而Python中是不需要的,Python中的变量就只是一个名称,其对应的类型,由对象的类型自己决定,这里可能有点拗口,通过下面的例子就能明白了

a=3

a=“ZHANGJI"

a=[1,2,3]

首先a是数字类型3,接着变量a指向字符类型对象,接着变量a指向列表对象,所以,变量自身没有类型,类型是指的对象

2.共享引用

上面说了最简单的a=3,在这个句的基础上增加一句

a=3

b=a

通过上面我们已经知道,第一句是变量a指向对象3,而第二句,计算机是如何处理的呢?a通过赋值给b,那a到底给了b什么?

直观的感觉就是b=3了,其实在b=a这句中,计算机是把引用地址给了b,也就是说,b指向了对象3,所以在使用b的时候就可以使用对象3了

但是在计算机内存中,对象3只有一个,只是指向它的变量是a和b,甚至可以更多,这叫”共享引用“

好的,在上面两句的基础上,我们再增加一句

a=3

b=a

a=”ZHANG"

那增加的这句又发生什么了呢?a是3还是ZHANG,那b是3还是ZHANG?

前两句我们知道是a和b都指向了对象3,而增加的一句,则是将a指向了对象“ZHANG”,因为要保证变量指向的唯一性,所以变量a也就不再指向对象3

所以上面的结果就是,变量b指向对象3,变量a指向对象“ZHANG”

3.共享引用与相等的关系

通过上面的共享引用,延伸出一个是否相等的问题,在Python中,判断两个是否相等,有两种方式,两种方式也有细微的差别

通过“==”来判断,通过“is”来判断,通过以下示例来了解

 

 通过上面的示例,同时也能验证第二部分讲到的“共享引用”

“==”是用来判断两个对象内容是否一样,

“is”是用来判断是否是一个对象

所以M、L是指向同一个对象,所以“==”判断对象内容是一样的,“is”判断是同一个对象,两个判断都是True

N是单独的赋值,所以是一个不同于L的对象,用“==”判断N、L两者的对象内容是一样的,所以为True,“is”判断两者是否同一个对象,答案是“False”,也就是说,N是指向了另一个内容也为[1,2,3]的对象,所以N和L是来那个不用的对象

由此看来,在Python中,相等有两层含义,内容是否一样,是否是同一个对象,需要特别注意

posted @ 2019-12-28 16:42  诡刺  阅读(...)  评论(...编辑  收藏