麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Python中的is和id用法分析

2020-02-23 06:20:10
字體:
來源:轉載
供稿:網友

本文實例講述了Python中的is和id用法。分享給大家供大家參考。具體分析如下:

(ob1 is ob2) 等價于 (id(ob1) == id(ob2))

首先id函數可以獲得對象的內存地址,如果兩個對象的內存地址是一樣的,那么這兩個對象肯定是一個對象。和is是等價的。Python源代碼為證。

代碼如下:static PyObject *
 cmp_outcome(int op, register PyObject *v, register PyObject *w)
{
 int res = 0;
 switch (op) {
 case PyCmp_IS:
  res = (v == w);
 break;
 case PyCmp_IS_NOT:
res = (v != w);
 break;

但是請看下邊代碼的這種情況怎么會出現呢?

代碼如下:In [1]: def bar(self, x):
...:     return self.x + y
...:
 
In [2]: class Foo(object):
...:     x = 9
...:     def __init__(self ,x):
...:         self.x = x
...:     bar = bar
...:    
 
In [3]: foo = Foo(5)
 
In [4]: foo.bar is Foo.bar
Out[4]: False
 
In [5]: id(foo.bar) == id(Foo.bar)
Out[5]: True

兩個對象用is判斷是False,用id判斷卻是True,這與我們已知的事實不符啊,這種現象該如何解釋呢?遇到這種情況最好的解決方法就是調用dis模塊去看下兩個比較語句到底做了什么。
代碼如下:In [7]: dis.dis("id(foo.bar) == id(Foo.bar)")
          0 BUILD_MAP       10340
          3 BUILD_TUPLE     28527
          6 <46>          
          7 DELETE_GLOBAL   29281 (29281)
         10 STORE_SLICE+1
         11 SLICE+2      
         12 DELETE_SUBSCR 
         13 DELETE_SUBSCR 
         14 SLICE+2      
         15 BUILD_MAP       10340
         18 PRINT_EXPR    
         19 JUMP_IF_FALSE_OR_POP 11887
         22 DELETE_GLOBAL   29281 (29281)
         25 STORE_SLICE+1
 
In [8]: dis.dis("foo.bar is Foo.bar")
          0 BUILD_TUPLE     28527

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 中文日韩 | 好吊色欧美一区二区三区四区 | 欧美中文字幕在线视频 | 欧美日韩高清一区二区三区 | 成人免费网站在线观看视频 | 狠狠操电影| 把娇妻调教成暴露狂 | 性欧美一区 | 久久久久99精品 | 一级毛片手机在线观看 | 毛片免费看电影 | 一区二区三区视频在线观看 | 成人毛片网站 | 超久久 | 国产精品久久99精品毛片三a | 草莓福利视频在线观看 | 9797色| 中文字幕网在线 | 在线成人av观看 | 成人免费看毛片 | 久久久久一区二区三区四区五区 | 国产成人高清在线 | 一级黄色性感片 | av之家在线观看 | 鸳鸯谱在线观看高清 | 日韩大片在线永久观看视频网站免费 | 美女黄视频在线观看 | 国产色片 | 国产免费让你躁在线视频 | 久久精品亚洲精品国产欧美kt∨ | 国产在线播放一区二区 | 激情在线免费观看 | 黄色片网站在线看 | 人人做人人看 | 中国女警察一级毛片视频 | 亚洲国产视频网 | 欧美成人国产va精品日本一级 | 97伦理 | 羞羞网站视频 | 欧美亚洲国产一区 | av在线直播观看 |