2017-09-16 14 views
0

首先,請原諒我可憐的英語。 我遇到了問題。這樣的代碼。爲什麼沒有分配給變量的實例在Python中有一些物理地址

class Mydict(dict): 
    pass 

print id(Mydict({"a": 1, "b": 2})) 
print id(Mydict({"a": 1, "b": 2})) 
print Mydict({"a": 1, "b": 2}).pop("a") 
print id(Mydict({"a": 1, "b": 2})) 

輸出:

>>>139700506146328 
>>>139700506146328 
>>>1 
>>>139700506146328 

當我實例化一個類。 並且沒有變量分配實例。 它給了我一些物理地址。

python在實例化時做了什麼?它如何分配物理地址?我從哪裏可以獲得一些信息?

我的Python是CPython的2.7.11

-----------------------增加(2017年9月17日)---- ---

我用了pycharm。

在我看來,它 也許得到不同的物理address.likes

>>>139700506146312 
>>>139700506233123 
>>>1 
>>>139700506235222 
+0

沒有什麼特別之處它使用的地址。它一再重複給同一個地址的原因是因爲在實例傳遞給'id'後,沒有剩餘的引用,並且存儲立即被回收。如果您保留對變量中某個實例的引用,則下一個實例將具有不同的地址。 –

回答

1

的對象將通過ultimatively garbage collection被破壞。 因爲我假設你在REPL上,所以它可能不會被破壞,因爲你使用_下劃線操作符來引用它。

另外當你不給變量的時候,你希望python做什麼;拒絕創建實例。 python解釋器正在完成它告訴的是創建一個對象並對其執行一些操作,並且會在調用gc時最終摧毀它。

請參見: Python garbage collector documentation

相關問題