2. id()用於返回對象在內存中的位置,並不表示對象的身份;is用來比較兩個對象的身份是不是相同,即是不是同一個對象;“==”用來比較對象是否有相同的值;type()用來比較兩個對象是否是有相同的類型,(type(a) is type(b));可見,類型本身也是對象;還可以使用isinstance(object, type)來檢查類型;
3. python可以爲對象創建計數並且可以自動回收垃圾,當減少對象的一個引用的時候,其計數自動減一,當計數爲0 的時候對象自動被回收,使用sys.getrefcount()函數可以獲取對象的當前引用計數;然而對於循環依賴,例如:
a={}
b={}
a['b']=b
b['a']=a
del a
del b
例子中引用對象不會歸0,所以對象不會銷燬;因此解釋器會定期執行循環檢測器,搜索不可訪問對象的循環並且刪除;
4. 引用是指爲對象創建一個新的副本,因此修改任一對象,另外一個對象都會受到影響,這屬於淺複製;深複製將創建一個新的對象,並且遞歸的複製他包含的所有對象,
淺複製:
a=[1,2,[3,4]]
b=list(a)
print b is a
#(print false)
b.append(100)
print b
#(print [1,2,[3,4],100])
b[2][0]=-100
print b
#([1,2,[-100,4],100])
print a
#([1,2,[-100,4]])
深複製:
import copy
a=[1,2,[3,4]]
b=copy.deepcopy(a)
b[2][0]=-100
print b
#([1,2,[-100,4]])
print a
#([1,2,[3,4]])
5. python的所有對象都是第一類對象(什麼意思?)(能夠使用標識符命名的所有對象都具有相同狀態,能夠命名的所有對象都可以當作數據處理)
一個字典中可以包含多種類型,比如函數、模塊、異常等等