1.Python 中的變量:是容器(bucket)還是標簽(label)?
在Python中“變量”這個名稱或許有點誤導性,應該叫“名稱”或“標簽”會更准確一些。但是,似乎所有人都習慣稱為“變量”了。無論叫什么名稱,都應該知道Python中的變量是如何進行工作的。
對變量的常見解釋就是存儲值的容器,有點像個桶(bucket),當然這不算准確。對許多編程語言(如C語言)來說,這種解釋是合理的。
但是,Python中的變量不是容器,而是指向Python對象的標簽,對象位於解釋器的命名空間中。任意數量的標簽(或變量)可以指向同一個對象。當對象發生變化時,所有指向它的變量的值都會改變。
通過以下簡單代碼,深刻體會理解上述含義:

1 a=[1,2,3] 2 b=a 3 c=b 4 b[1]=5
5 print(a,b,c)
上述代碼運行結果為:[1, 5, 3] [1, 5, 3] [1, 5, 3]
如果將變量視為容器,以上結果就說不通了。改變了一個容器的內容,另外兩個容器不應該同時發生變化。但是,如果變量只是指向對象的標簽,就說得通了。3個標簽都指向同一個對象,若對象發生變化,則3個標簽都會反映出來。
如果變量指向的是常量或不可變值,上述區別就不是十分明顯了:

1 a=1
2 b=a 3 c=b 4 b=5
5 print(a,b,c)
上述代碼運行結果為:1 5 1
因為變量指向的對象無法改變,所以變量的表現與兩種解釋均符合。實際上在第三行代碼執行完畢后,a、b和c就全都指向了同一個不可更改的整數對象,其值為1。下一行代碼b=5則是讓 b指向整數對象5,但a和c的指向沒有變化。