http://blog.sysuschool.com/u/mygod/index.html
请稍候,载入中。。。
 
请稍候,载入中。。。
2019-3-23 11:23:00
博文:聊聊python与JavaScript(三)

  今天周六,继续小结python基本语法。

 

  关于列表、元组、字典和字符串。

 

  先补充一个小细节,前面博文多次提到数据类型不可修改这个说法,开始我也困惑过,下面以数字类型和字符串类型来说说我的理解。

 

  先说数字吧,数字明显可以通过算术运算去改变,怎么就不能修改?在js里感觉不到这种困惑,因为js中数字类型的变量是原始数据类型,不会去谈引用关系,假如一个变量保存了一个数字,这个数字经过算术运算改变了,再通过赋值给了原变量,你只需要知道这个变量保存的值改变就行了,不会也没有必要去想数字不能改变的问题。但在py里不同(其实也是一样的,继续看就明白了),在py中数字与变量是引用关系,在内存中不同数字保存的地址是不一样的,或者说同一个数字,在内存中的地址是一样的!比如一个数字100,a=100,b=100,这时变量a和b都指向100的内存地址,好在100是不能变的(变了就不是100了,有点啰嗦),如果通过赋值改变,如a=101,这时a将不再指向100了。所以说数字是不可变的。如果还是不理解,没有关系,按js理解就可以了,没有必要去想引用关系。不过记住一点,赋值语句可以改变引用关系!!


  再说字符串吧,无论js还是py,都强调字符串是不能修改的,明明字符串对象提供了许多修改字符串的方法来修改字符串,怎么就不能修改了?其实道理是一样的,字符串对象提供的方法都不能修改原字符串(js里我很肯定这点,py里按理应该是,没有全部测试,资料没强调这点),举例说明下,在py下,比如str=no do no die”,用replace方法替换dostr.replace(“do”,”zuo”),在ipython下输出“no zuo no die”,但str还是“no do no die”,也就是说replace方法不能修改原字符串。其实不是不能修改字符串,跟数字一样,可以通过赋值修改,将用方法修改的字符串赋值给原变量就可以,如str=str.replace(“do”,”zuo”),这样字符串str就被修改了。可以把字符串想象成数字,字符串方法想象成算术运算。还是记住这句话,赋值可以改变引用关系。

 

  总结,数字和字符串的不可修改的意思是本身不能修改,但可以通过赋值进行变量的修改,通过赋值进行的修改原引用被断开!在js里数字和字符串与变量不是引用关系,在py中是引用关系,但数字和字符串本身是不可修改的,所以按js处理就可以,不用考虑引用问题(我的理解,没学完面向对象,不知这个结论是否下的太早!)。其实谈引用关系,主要是多个变量引用同一数据的问题,担心(或者希望)数据变化造成多个变量同时变化,结论是数字和字符串不管是不是引用,不会有这个问题,所以说按js里处理数字字符串即可!

 

  其他如列表、元组、字典则不同,引用关系要注意!

 

  不知不觉聊了一堆,把正题忘了,下篇再小结!

mygod | 阅读全文 | 回复(0) | 引用通告 | 编辑
发表评论:
请稍候,载入中。。。
公告
请稍候,载入中。。。
时间记忆
请稍候,载入中。。。
最新日志
请稍候,载入中。。。
最新评论
请稍候,载入中。。。
最新回复
请稍候,载入中。。。
我的好友
我的相册
站点信息
请稍候,载入中。。。
生活因感动而精彩,理想在创造中放飞
Powered by Oblog.