我想我理解指標,這是一個顯示正常行為的示例:
class A:
def __init__(self, n):
self.n = n
a = A(1)
b = A(1)
print(id(a))
print(id(b))
輸出是:
001 | 140441581640704
002 | 140441581640608
但是,當我執行此代碼時(在串列理解中創建物件)
class A:
def __init__(self, n):
self.n = n
a = [id(A(n)) for n in range(5)]
print(a)
我得到這個輸出:
[140270531148816, 140270531148816, 140270531148816, 140270531148816, 140270531148816]
哪個更糟(我猜?)因為它甚至不是具有相同屬性的物件。指標和屬性之間的區別可以用兩個完全相同的物件來舉例說明,這些物件具有相同的屬性但是是不同的物件,因此具有不同的指標。
uj5u.com熱心網友回復:
其實它們的id相同純屬巧合,Python通過參考計數來判斷是否銷毀一個物件。您不保存 each 的參考A(n)
,這會導致它在您獲得其 id 后立即被銷毀,因此下一個A(n)
將使用與前一個相同的記憶體空間。
>>> [id(A(n)) for n in range(5)]
[2014694650160, 2014694650160, 2014694650160, 2014694650160, 2014694650160]
>>> [id(a) for a in [A(n) for n in range(5)]]
[2014694650208, 2014694637632, 2014694649440, 2014694653808, 2014694649536]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/480162.html