2014-10-28 37 views
0

我已經閱讀了有關python如何創建對象並將這些作爲變量分配給它的「標記」。但是,我發現如果有兩個字符串或整數具有相同的值,那麼它只會爲它分配一個內存點,與列表,元組和元素不同。有一種情況發生時,是否有規則或類型列表?特別是,如果我設置創建不同的對象或相同的取決於類型(基本Python)

>>> x,y='a','a' 
>>> x is y 
True 
>>> x,y=1,1 
>>> x is y 
True 

但在另一方面,如果我做

>>> x,y={'a':1},{'a':1} 
>>> x is y 
False 
>>> x,y=(1,),(1,) 
>>> x is y 
False 
>>> x,y=[1],[1] 
>>> x is y 
False 
+0

有兩個原因:Python在代碼常量中存儲不可變的文字並重用這些常量,*和*也是有效標識符的字符串文字被實現(同一個字符串對象被重複使用而不是創建新實例)。 – 2014-10-28 12:22:35

回答

0

字符串是Python中不可改變和重用。字典不是,因此不能被重用。新的創建。這只是偶然,他們有相同的鍵和值。

+0

這就是我最初想的,但是元組vs列表呢?第一個是不可變的,而列表不是,但是它仍然在內存中構造兩個不同的對象。但它不適用於字符串和整數,即簡單類型。 – Medan 2014-10-28 16:41:04

+0

好問題。不同之處在於CPython [interns strings](http://stackoverflow.com/questions/15541404/python-string-interning)。列表和元組不被重複使用,因此不會被重用。 – 2014-10-28 17:42:18

相關問題