在python中int(1)和1的区别是什么?

中高级知识,有一定深度,慎入

python万物皆对象, hashable object都有_hash__和__eq__方法

请看如下:
cpython 3.9.10

λ ipython                                                                      
In [1]: int(1) is 1                                                                         
<>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?                                
<ipython-input-1-8d1eaec914a0>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?    
                                                                                            
  int(1) is 1                                                                               
Out[1]: True                                                                                
                                                                                            
In [2]: int(1).__hash__()                                                                   
Out[2]: 1                                                                                   
                                                                                            
In [3]: hash(int(1))                                                                        
Out[3]: 1                                                                                   
                                                                                            
In [4]: hash(1)                                                                             
Out[4]: 1                                                                                   
                                                                                            
In [5]: 1.__hash__()                                                                        
  Input In [5]                                                                              
    1.__hash__()                                                                            
      ^                                                                                     
SyntaxError: invalid syntax   

In [6]: id(int(1))
Out[6]: 1700832831792

In [7]: id(1)
Out[7]: 1700832831792                                                                                                          
为什么会出现语法错误?据我了解,int(1)和1都是同一integer object.
阅读 2.1k
2 个回答

因为 1. 是一个数。

所以 1.__hash__() 会被 parse 成 1. __hash__(),于是中间缺了一个 . ,所以 Invalid syntax。

你可以试试 1..__hash__()(1).__hash__()

很简单,很初级,数字的 dot 表示分数

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进