WTFPython有趣好玩的python现象

WTFpython 有趣好玩的python现象

1. "is"与“==”


  >>> a=256
  >>> b=256
  >>> a is b
  True
  
  
  >>>a=257
  >>>b=257
  >>>a is b
  False
  
  >>>a=257; b=257
  >>>a is b                     #当a,b在同一行时,两者指向同一个对象,所以为True
  True
  >>>id(a)
  2959262439888                #id值一样 是同一个对象
  >>>id(b)                       
  2959262439888
  
  
 
  >>>id(256)
  140720476640048          #-5~-256 是固有的 内存地址不变 每次使用都相当于提取是同一个对象
  >>>id(257)
  >>>2959262439504          #两个257不一样 时两个对象其id地址都不一样
  >>>id(257)
  >>>2959262439888
  >>>id(256)
  140720476640048

说明:
首先一二代码块出现不一样的结果的原因是 is是判断身份,is不仅要判断值 还要判断对象是否一致 而==只是比较值 因为(-5-256)经常被我们使用 所以python内部就自动设置为存在的对象,我们使用的时候这部分的数字时 其实就只是提取存在的这部分的数字而已,id地址这些都是固定了的,多次使用同一个这部分的数字其实都是同一个对象。257超过python内部设置存在的对象,每使用257 就相当于创建一个对象,其id地址都会不一样,**虽然都是257 但是不是同一个对象。所以用is判断就是False 用==判断就是True了

>>>a="wtf"
>>>b="wtf"        #字符串长度为0 或1 的对象都会被驻留,此处wtf被驻留 第二次使用wtf
>>>a is b        # 其实是直接引用的第一次驻留的wtf 两者为同一对象
True

>>>a="wtf!"
>>>b="wtf!"
> > > a is b                 # 驻留的原则是 字符串中只包含字母 数字 下划线时才能被驻留 
False                  # 此处有“!” 不能被驻留 所以两者为不同的对象 所以False

>>>a,b="wtf!","wtf!"
>>>a is b                #  在同一行时 被认为是同一对象
True


>>>a*20 is"aaaaaaaaaaaaaaaaaaaa"  # python中长度小于等于20的字符串会发生常量折叠
True                               #常量折叠意思就是当编译器编译遇到a*20时就立即 
                            # 用“aaaaaaaaaaaaaaaaaaaa"代替 而不是每次都  将a*20计算一遍                           


>>>a*21 is"aaaaaaaaaaaaaaaaaaaaaa" 
False                               #超过20 不会折叠  错误# 经过多次试验  字典里如果有两个key一样 那么输出的值都是**后一个value** 或许是python设置就是这样


>>>b={'a':'b','a':'c'}
>>>print(b['a'])
c                      

>>>b={5:'c'5.0'a'}         
>>>print(b[5])
a
>>>print(b[5.0])
a




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值