1. 程式人生 > >Python的動態類型

Python的動態類型

-s 創建對象 並且 表達式 bsp 變量 不想 另一個 字典

動態類型:
  在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的動態類型