python的大整數對象和小整數對象

* 背景:

a = 300
b = 300
print(a is b)
print(a == b)

如上代碼在pycharm和python控制檯下分別運行,pycharm顯示都是True, 控制檯打印第一條爲Ture,第二條爲Falsepython

1. 控制檯兩條print打印不一樣緣由

  • "is"是身份運算符,判斷兩個對象內存地址是否相同,內存地址爲對象的惟一身份標識,內存地址相同即爲同一個對象,比較時使用內置函數id()緩存

  • "=="是比較運算符,比較兩個對象的內容是否相同,在python中[-5,256]爲小整數,超過256爲大整數,因此上述代碼纔會判斷兩個對象內容相同可是內存地址不一樣函數

  • 打印內存地址能夠看出不是同一對象code

    >>> print(id(a))
      2297199632176
      >>> print(id(b))
      2297202001072

2. 對於大整數對象,pycharm和控制檯輸出結果不一樣

  • 控制檯每次回車鍵都是運行了一次,pycharm全部的代碼是先加載到內存中在運行,是一個總體,即同一個代碼塊的大整數對象爲同一個對象對象

    class Test1:
        a = -4
        b = -4
        c = 400
        e = 400
        d = -1234
    
    class Test2:
        a = -4
        c = 400
        d = -1234
    
    t1 = Test1()
    t2 = Test2()
    print(t1.a is t1.b) # True # 同一個代碼塊中的相同小整數爲同一對象
    print(t1.c is t1.e) # True # 同一個代碼塊中的相同大整數爲同一對象
    print(t1.a is t2.a) # True # 不一樣兩個代碼塊中的相同小整數爲同一對象
    print(t1.c is t2.c) # False # 不一樣兩個代碼塊中的相同大整數內容相同,不是同一對象
    print(t1.d is t2.d)

2. python對象的緩衝池機制

  • python全部的內建對象,都有本身特有的緩衝機制內存

  • python設置[-5,256]爲小整數範圍,將小整數範圍的數緩存在小整數對象池中,在這個範圍內的相同整數同爲一個對象pycharm

    >>> c = 256
    >>> d = 256
    >>> print(id(c))
    1424269392
    >>> print(id(d))
    1424269392
    >>> print(c is d)
    True
    >>> print(c==d)
    True
  • 超出小整數範圍的即爲大整數class

相關文章
相關標籤/搜索