Python的動態類型
阿新 • • 發佈:2017-08-03
-s 創建對象 並且 表達式 bsp 變量 不想 另一個 字典
當變量出現在表達式中時,它會馬上被當前引用的對象所代替,無論這個對象是什麽類型。
並且所有變量使用前必須先賦值。
例子:
a=3
1.分配一塊內存來表示對象3;
2.創建一個變量a;
3.將變量和對象3連接起來;
對象:
1.對象時被分配的一塊內存,有足夠的空間去表現他們所代表的值。
2.對象=值+頭部信息。頭部信息有兩個:一個是類型標誌符,一個是引用的計數器。
3.對於小的整數和字符串,Python會緩存並復用(即創建一個42,如果對象42的引用計數器為0了,它不會馬上回收垃圾,而是短暫存在一個地方,等待其他變量引用)
對象的垃圾回收機制:
當一個對象身上的引用計數器為0時,會被自動回收
共享引用:
在Python中,給一個變量賦新值,並不是替換了原始的對象,而是讓這個變量去引用另一個新對象。
不可變類型:
a=3
b=a
a=a+2
1.創建對象3,變量a引用對象3;
2.正如前面所說,當變量出現在表達式中時,它會馬上被當前引用的對象所代替,無論這個對象是什麽類型。
所以b=a時,直接替換成b=3,此時a和b共同引用了對象3;
3.同2,a=a+2直接看成a=3+2=5,此時a引用了新的對象5,而b還是引用對象3.
可變類型:
a1=[1,2,3]
a2=a1
a1[0]=4
執行a1[0]=4這句時,因為列表是可變的,所以對象[1,2,3]直接在原處修改成[4,2,3],此時a1,a2的應用並沒有變,
所以a1修改,a2也變了。
(如果不想要這種現象發生,就需要Python拷貝對象,而不是創建引用,比如從頭到尾的分片a2=a1[:],(如果是字典就用對象.copy()),
此時a1改變,a2還不變,因為a2=a1[:],a1,a2 並不是引用通一份對象,而是另外復制一份新的對象[1,2,3],然後讓a2引用它
)
動態類型:
在python中,類型是在運行過程中自動決定的,而不是通過代碼聲明的。
變量:
變量是一個系統表的元素,擁有指向對象的連接的空間
python中,類型的概念是存在於對象中的,而不是變量中,變量是通用的。
變量的使用:
當變量出現在表達式中時,它會馬上被當前引用的對象所代替,無論這個對象是什麽類型。
並且所有變量使用前必須先賦值。
例子:
a=3
1.分配一塊內存來表示對象3;
2.創建一個變量a;
3.將變量和對象3連接起來;
對象:
1.對象時被分配的一塊內存,有足夠的空間去表現他們所代表的值。
2.對象=值+頭部信息。頭部信息有兩個:一個是類型標誌符,一個是引用的計數器。
3.對於小的整數和字符串,Python會緩存並復用(即創建一個42,如果對象42的引用計數器為0了,它不會馬上回收垃圾,而是短暫存在一個地方,等待其他變量引用)
對象的垃圾回收機制:
當一個對象身上的引用計數器為0時,會被自動回收
共享引用:
在Python中,給一個變量賦新值,並不是替換了原始的對象,而是讓這個變量去引用另一個新對象。
不可變類型:
a=3
b=a
a=a+2
1.創建對象3,變量a引用對象3;
2.正如前面所說,當變量出現在表達式中時,它會馬上被當前引用的對象所代替,無論這個對象是什麽類型。
所以b=a時,直接替換成b=3,此時a和b共同引用了對象3;
3.同2,a=a+2直接看成a=3+2=5,此時a引用了新的對象5,而b還是引用對象3.
可變類型:
a1=[1,2,3]
a2=a1
a1[0]=4
執行a1[0]=4這句時,因為列表是可變的,所以對象[1,2,3]直接在原處修改成[4,2,3],此時a1,a2的應用並沒有變,
所以a1修改,a2也變了。
(如果不想要這種現象發生,就需要Python拷貝對象,而不是創建引用,比如從頭到尾的分片a2=a1[:],(如果是字典就用對象.copy()),
此時a1改變,a2還不變,因為a2=a1[:],a1,a2 並不是引用通一份對象,而是另外復制一份新的對象[1,2,3],然後讓a2引用它
)
Python的動態類型