首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

变量的基础知识梳理

版权声明

对于python的初学者来说,了解它的基础知识是很重要,同时也是很必要的。

我也不止一次听到有人说:

“要学习python其实很简单,去模仿他人的代码。从模仿开始也就不会那么痛苦了,而且学习也会高效。”

这是的确一种很有效的学习方法。就如同我们联系英语口语一样,多模仿、多用,就能说的很好。毕竟英语的很多使用场景几尽是相同的。而且我们作为普通大众,学习一门外语的最终目的不是创造一门语言,而是使用,所以也就不需要对英语进行一个系统化、结构化的学习。因此,在英语的学习中,模仿式的学习,对大众而言是一个比较科学的方法。

但是,学习一门计算机语言并不适合这样。这是因为我们学习计算机语言的核心不仅仅是会用它。我们还要用它来解决身边的实际问题。更何况,在未来你极有可能遇见与别人相似但不完全一样的问题,那这个时候,完全沿用前人的经验和方法可能并不适和。所以需要你举一反三的去创造一个适合当下的解决方案。但如果要达到这样的目的,就定少不了我们对python进行一个系统化、结构化的学习了。而在python系统化、结构化的学习中,基础知识和基本语法的学习,就显得尤为重要了。

所以,今天依旧来家梳理一个python中比较基础的概念——变量。

要了解变量,我们首先要知道变量是啥对吧。在wiki上,它这样定义:

变量是与一个有联系的、有一定象征意义的名字相对应的存储地址。它包含有大量知名或未知的可当作值来查询的信息。

有一点难懂。不急,咱们翻译一下:

变量,其实就是一个名字,它是指一个值的名称。

上图中的“a”,就是一个变量,它对应的值是1,所以“a”是值“1”的名字,我们称之为变量。中间的等号,通常被称为“赋值符号”。但要注意的是,所谓的变量并不是任何元素都可以胜任,在选择变量名的时候需要注意以下两点:

它可以是字母、数字和下划线三种元素的任意组合,但是首位元素一定不能是数字

不要与系统的关键字抢饭碗

第一点比较好理解,这是python自身的语法要求。而第二条存在的意义就在于,系统中的关键字一般来说都是有一定意义和使用场景的,如果将某个值赋值给一个系统关键字,极有可能影响到后续这个关键字的使用,毕竟它的意义已经不在是默认的那个意义了。

除了以上变量的定义和命名规则之外,我们在学习变量的时候,还应留意一个知识点:值类型与引用类型。先来看一段代码。

几乎同样的都是将“a”的赋值给变量“b”,然后更改“a”的值,为什么打印出来的变量“b”的值,会不一样呢?先来解释第一种情况。

首先,当我们第一次赋值给“a”的时候,再把“a”赋值给变量“b”,这个时候就和一定中情况一样,系统中已经默认变量“b”的值,等于1。而后当我们更改变量“a”所赋值为“3”的时候,由于数字类型是不可变的,所以变量“b”在此前已经默认了的值,并不会随着变量“a”的变化而变化,所以出现了上图中的第二种情况。

如果要用python自己来解释的话,就是内存地址的改变与不改变,需要用到id函数。

就如上图所示的那样,变量“a”的值,在变更了值后,它前后的内存地址是不一样的(间椭圆标识),而变量“b”的地址,在变量“a”更改前后,一直是恒等的(见方框标识)。所以,在变量“a”因为更改了值而改变了内存地址的时候,变量“b”并不会随之改变。同样的情况,还出现在字符串类型和元组类型的身上。因为字符串和元组也是两个不可变的数据类型。

要验证的原理很简单:既然是不可变的类型,那就是说,我们不能更改其中的某个元素。

正如我们所想的那样,当我们试图对字符串和元组类型中某个元素进行改变的时候,系统会直接报错。所以,到这儿我们可以下一个结论:数字类型、字符串类型与元组类型在python中是不可变对象,属于值类型的范畴,它们不会因为所赋值变量的更改而改变内存地址

好,讲了值类型的不可变,现在来说说引用类型的可变性。

与数字类型不同,列表类型在更改了变量“a”的值过后,变量“b”的值也随之改变了。这是因为列表类型在更改了其中某个元素的值后,此列表的内存地址并不会改变。我们还是用id函数来检验一下。(插入图片

留意一下红色框框里的值,当变量“a”中的某个元素改变的时候,它的id地址是不是没有发生改变?这也是为什么变量“b”的值,会自动的对应到修改后的变量“a”的值上。

看到这里,我相信你或多或少会有所疑问,为什么python中会出现这样的情况呢?这是因为python是一个面对对象的计算机语言,在python中,一切都是对象,一切值的传递都是对象的引用。而对象的引用就牵扯到了地址,因此地址不变,变量的值也就不会变化。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180128G0F3CG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券