码迷,mamicode.com
首页 > 编程语言 > 详细

python每日一帖---难懂的现象+清楚的解释---我们都一样

时间:2018-09-02 10:25:58      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:函数   false   为什么   print   解释   str   put   应该   strong   

? 在深处,我们都一样 *
class WTF:
  pass

Output:

>>> WTF() == WTF() # 两个不同的对象不相等
False
>>> WTF() is WTF() # id一样不相等
False
>>> hash(WTF()) == hash(WTF()) # 哈希值也“应该”不相等
True
>>> id(WTF()) == id(WTF())
True

解释:

  • 当使用 id 函数时,Python 建立一个名为WTF 的对象并把它传入id 函数. id 函数拿到它的 id (它的内存位置), 然后丢弃这个对象。
  • 当我们在交互器中做这些时,如果Python发现一个对象占用了未丢弃的在用的内存位置,Python就会给这个对象一个新位置。
  • 不过为什么用 is 比较结果是 False呢? 让我们来看看。

    class WTF(object):
    def __init__(self): print("I") # 创建时触发
    def __del__(self): print("D") #丢弃时触发

    输出:

    >>> WTF() is WTF()
    I  # 创建1
    I  # 创建2,比较,内存位置不同,返回false
    D # 删除1
    D # 删除2
    False
    >>> id(WTF()) == id(WTF())
    I #创建1
    D #记住内存,连同内存一起删掉
    I #创建2,它用了1的内存(因为1已经删掉),比较,两个内存相同。
    D #删除2
    True

python每日一帖---难懂的现象+清楚的解释---我们都一样

标签:函数   false   为什么   print   解释   str   put   应该   strong   

原文地址:http://blog.51cto.com/13946759/2168977

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!