更多课程 选择中心


Python培训

400-996-5531

Python基础语法-常量与变量


Python是一门强类型的动态语言。

字面常量,变量没有类型,变量只是在特定的时间指向特定的对象而已,变量所指向的对象是有类型的。

变量:变量在赋值时被创建,它可以是任何对象的引用,但必须在引用前被赋值。

举例来说:当我们如下赋值时:

>>> a = 3 # 给一个对象3赋予变量a

对于上面的赋值,Python将会明确的执行3个步骤来响应这个语句:

创建一个对象代表值3;

如果不存在变量a,就创建变量a;

把变量a与新创建的对象3关联。

变量随着赋值操作出现的。变量和对象是被存储在不同的内存空间中的。变量与对象通过指针相关联。变量永远指向对象且永不指向变量。随着赋值a = 3语句的执行,变量a就变成了对象3的一个引用。

变量与对象之间的链接在Python中称之为引用。也就是说,一个引用也就是一种关联,在内存中以指针的形式实现。

变量、对象与引用的区别:

+ 变量 是Python解释器系统表中的一些条目, 它们是用来指向对象的。

+ 对象 是一些列的被分配的内存, 有足够的空间存储与之相关的数据类型。

+ 引用 自动地跟随在变量与对象之间。

对象才有类型, 而变量没有。一个例子:

>>> a = 3 # a是一个整型数据>>> a = 'spam' # 现在是一个字符串了>>> a = 1.23 # 现在是一个浮点数了

在Python中,事情工作的很简单,再次强调:Names没有类型;只有对象有类型,而不是变量。

变量的命名规则:

只能包含字母、数字和下划线

只能以字母或下划线开头

不能是Python解释器的保留字

共享引用

接下来我们看两个变量同时指向一个对象的情况:

>>> a = 3>>> b = a

现在,假设我们再进行如下的赋值语句:

>>> a = 3>>> b = a>>> a = 'spam'

现在变量a指向的对象spam。然而变量b却依然指向对象3。赋值意味着创建了新的对象。

共享引用与原地改变

接下来要看的是有一些对象会进行原地改变,那就是Python的可变对象,包括列表,字典及集合。对于一个支持原地改变的对象,我们需要知道共享引用,如果一个改变会影响其他的对象。还是看个例子吧:

>>> L1 = [2, 3, 4]>>> L2 = L1

L1是一个列表且包含2、3、4三个对象。列表中的元素通过它们的位置进行访问,所以L1[0]指向对象2,它是列表L1的第一个对象。当然列表也是一个对象,就像其他的整数与字符串。当进行上面的两个赋值后,L1与L2都指向了同一个共享的对象。

现在,我们进行如下的赋值:

>>> L1 = 24

这个赋值语句简单地把L1指向了不同的对象;L2依然指向原来的列表。接下来我们进行一些改变:

>>> L1 = [2, 3, 4] # 一个可变的对象>>> L2 = L1 # L2与L1指向了同样的对象>>> L1[0] = 24 # 一个原地改变的操作>>> L1 # L1已经改变了[24, 3, 4]>>> L2 # L2也是与L1相同[24, 3, 4]

上面的例子中,我们并没有改变L1对象本身,只是改变了L1中的一个对象。这种原地改变的操作的情况只出现在可变对象中。举个字典的例子:

>>> d1 = {'a': 1, 'b': 2}>>> d2 = d1>>> d1{'b': 2, 'a': 1}>>> d2{'b': 2, 'a': 1}>>> d1['a'] = 'a'>>> d2{'b': 2, 'a': 'a'}

我们可以使用copy的方法:

>>> L1 = [2, 3, 4]>>> L2 = L1[:] # 制作L1的拷贝>>> L1[0] = 24>>> L1[24, 3, 4]>>> L2 # L2并没有改变[2, 3, 4]

通过上面的例子我们发现,L1的改变并没有影响L2,L2只是引用了L1的一份拷贝,并不是原来的L1自身,也就说,L1与L2指向了两个不同的内存空间。

接下来谈论另外一个话题,Python会缓存小的整数及小的字符串。举个例子吧:

>>> L = [1, 2, 3]>>> M = L # M与L指向相同的对象>>> L == M # 具有相同的值True>>> L is M # 依然相同True>>> id(L)4338913608>>> id(M)4338913608

通过上面的例子,==判断两个引用的对象是否有相同的值;第二个操作符is是用来判断对象id的,只有两个names指向相同的对象,is比==判断对象是否相同更强壮。is只是简单地比较两个对象的指针。再看一个例子:

>>> L = [1, 2, 3]>>> M = [1, 2, 3] # M与L指向不同的对象(赋值意味着产生新的对象)>>> L == M # 具有相同的值True>>> L is M # 但是是不同的对象False>>> id(L)4338913480>>> id(M)4338915208

接下来呢,我们看看对于小数字的操作是否不符合上面的预期:

>>> X = 42>>> Y = 42 # X与Y应该是两个不同的对象>>> id(X)4297547872>>> id(Y)4297547872>>> X == YTrue>>> X is Y # but anyhow: 是缓存在作祟!True# 使用个大的数字呢?>>> X = 1234567>>> Y = 1234567>>> X == YTrue>>> X is YFalse>>> id(X)4336930640>>> id(Y)4338529328

今天的文章中遇到了列表及字典,大家不用担心,现在大家不知道或不清楚怎么使用都是没有问题的,后续会继续有相应的文章呈现。

预约申请免费试听课

填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:给Python软件开发测试的25个忠告!
下一篇:用 Python 解读十九大工作报告

2021年Python全套免费视频教程在哪里?

Python编程学习路线

Python最高有几级?

人工智能与语音遥控的区别?

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省