设为首页 收藏本站
查看: 1138|回复: 0

[经验分享] 000-Python常量与变量

[复制链接]

尚未签到

发表于 2018-8-8 07:31:45 | 显示全部楼层 |阅读模式
python常量与变量  昨天的文章虽然有插图,但是一个都没有显示出来,估计是天气太热,不愿意露面的缘故吧。这些都不是事,暂且不表,今天再次发布与昨天相同的文章,主要为了弥补3个插图。为了有更好的排版体验及阅读效果,小白还专门购买了Pro版的MarkEditor及使用了七牛云服务(小白也是够狠的,下了血本了)。
  Python是一门强类型的动态语言。
  字面常量,变量没有类型,变量只是在特定的时间指向特定的对象而已,变量所指向的对象是有类型的。
  变量:变量在赋值时被创建,它可以是任何对象的引用,但必须在引用前被赋值。
  举例来说:当我们如下赋值时:
>>> a = 3 # 给一个对象3赋予变量a  对于上面的赋值,Python将会明确的执行3个步骤来响应这个语句:

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

  变量与对象之间的链接在Python中称之为引用。也就是说,一个引用也就是一种关联,在内存中以指针的形式实现。
  变量、对象与引用的区别:
  + 变量 是Python解释器系统表中的一些条目, 它们是用来指向对象的。
  + 对象 是一些列的被分配的内存, 有足够的空间存储与之相关的数据类型。
  + 引用 自动地跟随在变量与对象之间。
  对象才有类型, 而变量没有。一个例子:
>>> a = 3 # a是一个整型数据  
>>> a = 'spam' # 现在是一个字符串了
  
>>> a = 1.23 # 现在是一个浮点数了
  在Python中,事情工作的很简单,再次强调:Names没有类型;只有对象有类型,而不是变量。
  变量的命名规则:

  •   只能包含字母、数字和下划线
  •   只能以字母或下划线开头
  •   不能是Python解释器的保留字
共享引用
  接下来我们看两个变量同时指向一个对象的情况:
>>> a = 3  
>>> b = a
  赋值完毕,它们在内存中的图解为:
DSC0001.png

  现在,假设我们再进行如下的赋值语句:
>>> a = 3  
>>> b = a
  
>>> a = 'spam'
  现在变量a指向的对象spam。然而变量b却依然指向对象3。赋值意味着创建了新的对象。上面三句语句在内存中的图解为:
DSC0002.png

共享引用与原地改变
  接下来要看的是有一些对象会进行原地改变,那就是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 == Y
  
True
  
>>> X is Y # but anyhow: 是缓存在作祟!
  
True
  
# 使用个大的数字呢?
  
>>> X = 1234567
  
>>> Y = 1234567
  
>>> X == Y
  
True
  
>>> X is Y
  
False
  
>>> id(X)
  
4336930640
  
>>> id(Y)
  
4338529328
  今天的文章中遇到了列表及字典,大家不用担心,现在大家不知道或不清楚怎么使用都是没有问题的,后续会继续有相应的文章呈现。
  今天就给大家介绍到这里,明天会接续讲解运算符与表达式。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-548378-1-1.html 上篇帖子: CentOS7下安装Python3和Python2并存 下篇帖子: Python编写地区选择-Dict
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表