4-1.Python對象。與所有Python對象有關的三個屬性是什麼?簡單描述一下。
答案:
三個屬性是身份,類型和值。
身份:每一個對象都有一個唯一的身份標識自己,任何對象的身份可以使用內建函數id()來得到。
類型:對象的類型決定了該對象可以保存什麼類型的值,可以進行什麼樣的操作,以及進行什麼樣 的規則。
值:對象表示的數據項。
4-2.類型。不可更改(immutable)指的是什麼?Python的哪些類型是可更改的(mutable)?哪些不是?
答案:
不可更改指的是對象的值不可以改變。Python中列表,字典是可更改的,數字,字符串,元組是不可更改的。
4-3.類型。哪些Python類型是按照順序訪問的?它們和映射類型的不同是什麼?
答案:
字符串,列表,元組是按照順序訪問的。序列類型是指容器內的元素按從0開始的索引順序訪問,一次可以訪問一個或者多個元素;而映射類型的元素無序存放,通過一個唯一的鍵來訪問。
4-4.type()。內建函數type()做什麼?type()返回的對象是什麼?
答案:
type()函數返回對象的類型信息,type()返回的對象是類型對象。
4-5.str()和repr()。內建函數str()和repr()之間的不同是什麼?哪一個等價於反引號(``)操作符?
答案:
str()函數得到的字符串可讀性好,輸出對用戶友好;repr()函數得到的字符串通常可以使用eval()重新獲得該對象,輸出對Python友好。
4-6.對象相等。你認爲type(a)==type(b)和type(a) is type(b)之間的不同是什麼?爲什麼會選擇後者?函數isinstance()與這有什麼關係?
答案:
前者是對象值的比較,後者是身份的比較。在運行期間,只有一個類型對象來表示整型類型,也就是說,type(a),type(b)都是同一個對象<type 'int'>,就不需要浪費時間比較他們的值了,直接比較身份就可以了。isinstance()函數也是用來判斷對象類型的,可以使用一個類型對象的元組作爲參數,不必寫多行if-elif-else代碼。
4-7.略。
4-8.列表和元組。列表和元組的相同點是什麼?不同點是什麼?
答案:
列表和元組的相同點:存儲模型都是容器,訪問模型都是順序訪問。
不同點是列表值可以更改,而元組值不可以更改。
4-9.實踐。給定以下賦值:
a=10
b=10
c=100
d=100
e=10.0
f=10.0
請問下列表達式輸出的是什麼,爲什麼?
(a) a is b
(b) c is d
(c) e is f
答案:
(a)(b)輸出True,(c)False。因爲整型對象和字符串對象是不可變對象,所以Python會很高效地緩存它們,這就會造成我們認爲Python應該創建新對象時,他卻沒有創建新對象的假象。Python僅僅緩存簡單整型。