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

[经验分享] python学习——一些有趣的讨论

[复制链接]

尚未签到

发表于 2017-4-29 14:13:21 | 显示全部楼层 |阅读模式
  由于底层的c实现,python中的指针问题也成为了一个大问题,得好好研究
  1) 共享引用
  由于python中,万物皆对象,所以赋值总是代表着引用的copy,很好的一个例子
python 代码

  • >>> X = [1, 2, 3]   
  • >>> L = ['a', X, 'b']   
  • >>> D = {'x':X, 'y':2}   
  • >>> L   
  • ['a', [1, 2, 3], 'b']   
  • >>> D   
  • {'y': 2, 'x': [1, 2, 3]}   
  • >>> X[1] = 'aha'   
  • >>> X   
  • [1, 'aha', 3]   
  • >>> L   
  • ['a', [1, 'aha', 3], 'b']   
  • >>> D   
  • {'y': 2, 'x': [1, 'aha', 3]}  

  有程序设计经验的人很容易明白上面的代码,当我们在L,D中使用X时,实际上是把[1, 2, 3]这个列表的地址放到了L,D中X的位置上,当[1, 2, 3]中元素改变时,地址并没有变,所以L,D也跟着变。
python 代码

  • >>> s = 'abc'   
  • >>> l = [1, 2, s]   
  • >>> l   
  • [1, 2, 'abc']   
  • >>> s = 'def'   
  • >>> l   
  • [1, 2, 'abc']  

  这段代码有人就该迷糊了,s不是指向的是一个字符串地址吗,l中相应的位置也是这个地址啊,s改变了,为什么l不变?呵呵,原因就是字符串是不可遍的,当我们把'def'赋给s时,s所指向的地址就变了,而l中s的位置还是存的'abc'的地址,这就是l不变的原因。
  还有一个有趣的例子
python 代码

  • >>> L = [1, 2]   
  • >>> X = L * 2   
  • >>> X   
  • [1, 2, 1, 2]   
  • >>> Y = [L] * 2   
  • >>> Y   
  • [[1, 2], [1, 2]]   
  • >>> L[1] = 'aha'   
  • >>> X   
  • [1, 2, 1, 2]   
  • >>> Y   
  • [[1, 'aha'], [1, 'aha']]  

  实际上X的效果类似[1, 2] + [1, 2],Y的效果类似[L] + [L] = [L, L],这回该明白了吧。
  2)比较
  java中比较有==,<=,>=,equals,comparaTo等等。python中比较是==,<=,>=,is,is not。当我们使用python的比较时,它会自动比较两个对象中内部的数据结构。啥也不说了,例子是最好的teacher
python 代码

  • >>> L1 = [1, ('a', 3)]   
  • >>> L2 = [1, ('a', 3)]   
  • >>> L1 == L2   
  • True  
  • >>> L1 is L2   
  • False  
  • >>> L1 < L2   
  • False  
  • >>> L1 > L2   
  • False  
  • >>> L2[1] = ('a', 2)   
  • >>> L2   
  • [1, ('a', 2)]   
  • >>> L1 < L2   
  • False  
  • >>> L1 > L2   
  • True  

  3) 消除指针影响
  对于向列表和字典那样的可变类型来说,有时我们不需要指针式的引用(在java中,也有类似的需求),实际上解决起来很简单,例子说明一切
python 代码

  • >>> L = [1, 2, 3]   
  • >>> M = ['x', L[:], 'y']   
  • >>> M   
  • ['x', [1, 2, 3], 'y']   
  • >>> L[1] = 'aha'   
  • >>> L   
  • [1, 'aha', 3]   
  • >>> M   
  • ['x', [1, 2, 3], 'y']  

运维网声明 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.yunweiku.com/thread-370865-1-1.html 上篇帖子: 一位大牛整理的Python资料 【转】 下篇帖子: 比较javascript学python-2 闭包实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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